定义
提供字节序列的一般视图。Provides a generic view of a sequence of bytes.
流涉及三个基本操作
Streams involve three fundamental operations:
- 可以读取流(You can read from streams.)。 读取是从流到数据结构(如字节数组)的数据传输。
- 可以写入流(You can write to streams.)。 写入是从数据结构到流的数据传输。
- 流可以支持查找(Streams can support seeking.)。 查找是对流内的当前位置进行的查询和修改。 查找功能取决于流具有的后备存储区类型。 例如,网络流没有当前位置的统一概念,因此一般不支持查找。
Stream 是所有流的抽象基类。
Stream is the abstract base class of all streams.
流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道或者 TCP/IP 套接字。
A stream is an abstraction of a sequence of bytes, such as a file, an input/output device, an inter-process communication pipe, or a TCP/IP socket.
Stream 类及其派生类提供这些不同类型的输入和输出的一般视图,使程序员不必了解操作系统和基础设备的具体细节。
根据基础数据源或储存库,流可能只支持这些功能中的一部分。 通过使用 CanRead、CanWrite 和 CanSeek 属性,应用程序可以查询流的功能。
Read 和 Write 方法读写各种不同格式的数据。 对于支持查找的流,使用 Seek 和 SetLength 方法以及 Position 和 Length 属性可查询和修改流的当前位置和长度。
有些流实现执行基础数据的本地缓冲以提高性能。 对于这样的流,Flush 方法可用于清除所有内部缓冲区并确保将所有数据写入基础数据源或储存库。
在 Stream 调用 Close 可清空任何缓存的数据,从本质上为您调用 Flush。 Close 还释放操作系统资源(如文件句柄、网络连接或用于任何内部缓冲的内存)。BufferedStream 类提供了将一个经过缓冲的流环绕另一个流的功能,以便提高读写性能。
如果需要不带后备存储区(即位存储桶)的流,请使用 Null。
对实现者的说明
在实现 Stream 的派生类时,必须提供 Read 和 Write 方法的实现。 异步方法 BeginRead、EndRead、BeginWrite 和 EndWrite 通过同步方法 Read 和 Write 实现。 同样,Read 和 Write 的实现也将与异步方法一起正常工作。 ReadByte 和 WriteByte 的默认实现创建一个新的单元素字节数组,然后调用 Read 和 Write 的实现。 当从Stream 派生时,如果有内部字节缓冲区,则强烈建议重写这些方法以访问内部缓冲区,这样性能将得到显著提高。 还必须提供CanRead、CanSeek、CanWrite、Flush、Length、Position、Seek 和 SetLength 的实现。
不要重写 Close 方法,而应将所有 Stream 清理逻辑放入 Dispose 方法中。 有关更多信息,请参见 实现 Dispose 方法。