这里需要注意的是, 装饰器和咖啡都继承于同一个父类只是因为需要它们的类型匹配而已, 并不是要继承行为.
.NET Core 代码实现
Beverage:
namespace DecoratorPattern.Core...个数组不同的是, 数组是把所有的数据都一同放在了内存里, 而stream则是顺序的/连续的处理数据, 要么是一次处理一个字节, 要么是一次处理特定大小(不能太大, 可管理的范围内)的数据....上面方法签名里的offset参数, 表示的是缓冲数组开始读取或写入的位置, 而不是指stream里面的位置.
寻址 Seek
CanSeek为true的话, Stream就可以被寻址....Read和Write方法通过抛出异常的方式来表示超时已经发生了.
线程安全
stream并不是线程安全的, 也就是说两个线程同时读或写一个stream的时候就会报错....有一种做法是: 在每次传输的前4个字节里存放一个整数表示消息的长度, 可以使用BitConverter类来对整型和长度为4的字节数组进行转换.