Stream
定义
广义来讲,流应该是一种物质的连续动态的形式,例如水流,车流等。
那么在C#中流应该既是连续数据的载体,而且是二进制形态的数据。Stream
C#中的Stream是个抽象类,属性包含了可读可写可查找及延时等特性还有有一个长度Length和Position
这个Position属性很重要,相当于”游标”的作用,用来获取或设置当前流中的(游标)位置.Stream有几个派生类,主要是这几个命名空间的:Data(数据库)、IO(计算机IO操作)、Net(网络通信)。
这里选取IO下的MemoryStream为例。
在源码的注释中有这么句话:This stream may reduce the need for temporary buffers and files in an application. (流或许可以减少我们在应用程序中对临时缓存和文件的依赖)
换句话说MemoryStream能在开发过程中为我们提供更简便的缓存服务。MemoryStream与Byte[]
由此不禁想到,MemoryStream一定与byte[]有一定的关系。同样满足容纳多个字节数据,但byte[]的抽象程度显然更高,不具备在应用中对流式数据多方面的控制和扩展能力。查看源码,我们可以看到这行代码
private byte[] _buffer; // Either allocated internally or externally.
作为私有成员变量,可以从内部申请或从外部传入来得到一个byte[]作为缓存区。自然也提供了两者相互转化的方法供我们调用,而且很简洁。
MemoryStream转为byte[]: public virtual byte[] ToArray()
byte[]转为MemoryStream:public