zhiheyang

.net stream

  1. 流的抽象基类Stream:Stream 是所有流的抽象基类。流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道或者 TCP/IP 套接字。Stream 类及其派生类提供这些不同类型的输入和输出的一般视图,使程序员不必了解操作系统和基础设备的具体细节。根据基础数据源或储存库,流可能只支持这些功能中的一部分。通过使用 CanReadCanWriteCanSeek 属性,应用程序可以查询流的功能。ReadWrite 方法读写各种不同格式的数据。对于支持查找的流,使用 SeekSetLength 方法以及 PositionLength 属性可查询和修改流的当前位置和长度。有些流实现执行基础数据的本地缓冲以提高性能。对于这样的流,Flush 方法可用于清除所有内部缓冲区并确保将所有数据写入基础数据源或储存库。在 Stream 上调用 Close 将刷新所有经过缓冲处理的数据,本质上是为您调用了 FlushClose 也会释放操作系统资源,如文件句柄、网络连接或用于任何内部缓冲的内存。
  2. 继承自抽象基类Stream的流按功能可分为基流功能流

    1)   基流指有实际的数据源的流,它们封装了从实际数据源读取或写入数据的方法,这样实际使用中就不用考虑与底层比如文件系统,网络连接等怎么打交道。

      .net框架中的基流有如下几种:

  • FileStream:以文件作为数据源,在构造FileStream的对象实例时,都要指明要读取或写入的文件(FileStream的构造函数都要指明文件的路径)。
  • NetworkStream:以网络连接作为数据源,在构造NetworkStream的对象实例时,都要指明要操作的Socket(NetworkStream的构造函数都要有  Socket)。
  • MemoryStream:以内存字节流作为数据源,MemoryStream可以以非空字节流数组作为数据源,也可以使用空数组。当使用非空字节数组时,虽然根据传递到构造函数中的参数可能能够修改现有内容,但既不能追加也不能收缩流。空内存流是可调整大小的,而且可以向其写入和从中读取。

    2)   功能流是对基础流提供一定功能比如压缩解压缩、加密解密的流,功能流必须要有基础流(即在构造功能流的对象实例时,都要指明基础流)。基础流可以是基流或者功能流,也就是说可以将基流附加到一个或多个提供所需功能的功能流从而形成传递流

      .net框架中的功能流有如下几种:

  • DeflateStream、GZipStream:压缩与解压缩流。
  • BufferedStream:缓冲流。
  • CryptoStream:加密解密流。

  3. 流的读写

    1).流自身有Read和Write方法,但流自身的Read和Write方法都是直接对字节数组操作,即使用流自身的Read和Write方法前都要将要准备好字节数组,Read方法要准备好byte[]存储从流中读取的数据,Write方法要准备好要写入流中的byte[]。

    2).根据读写操作处理的数据单位不同,可分为:字节(或二进制)读取器,字节(或二进制)编写器,字符读取器,字符编写器。在构造读取器或编写器的对象实例时,都要传入要操作的流或者能构造出流的参数如文件路径。

    对流按照字节进行读写(用特定的编码将二进制值读作基元数据类型或以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。):

     BinaryReader、BinaryWriter

    对流按照字符进行读写(以一种特定的编码从字节流中读取字符或将字符转化为特定编码写入流):

     StreamReader、StreamWriter

 

参考:

  • http://shitouer.cn/2012/12/deep-understand-of-java-stream/
  • MSDN

posted on 2013-11-04 07:48  zhiheyang  阅读(537)  评论(0编辑  收藏  举报

导航