Stream类
流有3种基本操作:
可以从流读取。读取是从流到数据结构(如字节数组)的数据传输。
可以向流写入。写入是从数据结构到流的数据传输。
流可以支持查找。查找是在流内对当前位置进行的查询和修改。查找功能取决于流所表示的后备存储的类型。例如,当前位置的概念并不适用于网络流,因此网络流不支持查找。基于后台数据源和存储库,不同的流可能只支持上述的某些功能,应用程序可以通过查询某个流的CanRead、CanWrite和CanSeek属性来了解该流能支持哪些功能。
![]() |
(点击查看大图)图7-3 字节数据流 |
![]() |
(点击查看大图)图7-4 字符数据流 |
![]() |
图7-5 二进制数据流 |
Read和Write方法支持读/写字节数据。对于支持查找功能的流,使用Seek和SetLength方法以及Postion和Length属性可查询和修改流的当前位置和长度。
Stream类的公共属性和公共方法分别如表7-1与表7-2所示。
表7-1 Stream类公共属性
属 性 |
说 明 |
CanRead |
获取指示当前流是否支持读取的值 |
CanSeek |
获取指示当前流是否支持查找功能的值 |
CanWrite |
获取指示当前流是否支持写入功能的值 |
Length |
获取用字节表示的流的长度 |
Position |
获取或设置当前流中的位置 |
表7-2 Stream类公共方法
属 性 |
说 明 |
BeginRead |
开始异步读操作 |
BeginWrite |
开始异步写操作 |
Close |
关闭当前流并释放与之关联的所有资源 (如套接字和文件句柄) |
EndRead |
等待挂起的异步读取完成 |
EndWrite |
结束异步写操作 |
Flush |
将清除该流的所有缓冲区,并使得所有 缓冲区数据被写入到基础设备 |
Read |
从当前流读取字节序列,并在此流的 当前位置提示读取的字节数 |
ReadByte |
从流中读取一个字节,并将流内的位置向前 推移一个字节;如果已到达流的末尾,则返回-1 |
Seek |
设置当前流的位置 |
SetLength |
设置当前流的长度 |
Write |
向当前流写入字节序列,并在此流的 当前位置提示写入的字节数 |
WriteByte |
将一个字节写入流内的当前位置, 并将流内的位置向前推移一个字节 |