各种Stream 的区别

Stream

System.IO为我们提供了一个抽象类Stream,Stream类支持对字节的读写操作。在Stream类中包括了对异步操作的支持。

既然Stream是抽象类,所有其它流的类就都必须从Steam类中继承。Stream类及其子类共同构成了一个数据源和数据存储的视图,从而封装了操作系统和底层存储的各个细节,使程序员把注意力集中到程序的应用逻辑上来。

流包含以下基本操作:

读操作(Reading)。即读出流中的数据,把数据存放在另一种数据结构中,比如数组。

写操作(Writting)。即从另一种数据结构中读出数据,存放至流对象中。

搜索操作(Seeking)。即从流中的当前位置开始搜索,定位到指定的位置。

由于数据视图的不同,一些流可能不同时支持以上的所有操作。比如网络流就不支持搜索操作。Stream类提供了CanRead,CanWrite和CanSeek三种属性,来表示流是否支持这些操作。

BinaryReader和BinaryWriter

BinaryReader和BinaryWriter这两个类提供了从字符串或原始数据到各种流之间的读写操作。

Stream

File类的静态方法主要是用于创建FileStream类。一个FileStream类的实例实际上代表一个磁盘文件,它通过Seek()方法进行对文件的随机访问,也同时包含了流的标准输入、标准输出、标准错误等。FileStream默认对文件的打开方式是同步的,但它同样很好地支持异步操作。

TextReader和TextWriter

TextReader和TextWriter类都是抽象类。和Stream类的字节形式的输入和输出不同,它们用于Unicode字符的输入和输出

StringReader和StringWriter

StringReader和StringWriter在字符串中读写字符。

StreamReader和StreamWriter

StreamReader和StreamWriter在流中读写字符。

BufferedStream

BufferedStream是为诸如网络 流的其它流添加缓冲的一种流类型。其实,FileStream流自身内部含有缓冲,而MemorySteam流则不需要缓冲。一个BufferStream 类的实例可以由多个其它类型的流复合而成,以达到提高性能的目的。缓冲实际上是内存中的一个字节块,利用缓冲可以避免操作系统频繁地到磁盘上读取数据,从而减轻了操作系统的负担。

MemoryStream

MemoryStream是一个无缓冲流,它所封装的数据直接放在内存中,因此可以用于快速临时存储、进程间传递信息等。

NetworkSteam

Networksteam表示在互联网络上传递的流。

当使用名字空间System.IO中提供的类时,对存储数据的访问权限必须符合操作系统的安全性要求。

注意:不要使用这些类来编写应用程序对网络文件进行的操作。因为Internet默认的安全政策是不允许对文件直接访问。可以使用IsolatedStroage类来处理网络文件

BufferedStream 与MemoryStream 的区别

两个都是缓冲区,BufferedStream并不是将所有内容都存放到内存中,而MemoryStream则是。BufferedStream必须跟其
他流如FileStream结合使用,而MemoryStream则不用,虽然可以把MemoryStream转换为其他流。

原文地址:https://www.cnblogs.com/Dream-High/p/3401453.html