.NET流的体系结构

.NET I/O操作的最小单位是字节,这是因为进行I/O操作时许多设备面向字节。因此.NET的System.IO命名空间提供了Stream类表示字节流。前面提到,即使数据流所连接的物理设备不同,所有的数据流都以相同的方式工作。Stream类提供了标准的数据流操作,比如读取字节、写入字节操作等。

Stream类是面向字节的,但是程序员通常更喜欢使用字符。在.NET中char是16位,而字节是8位。如果正在使用ASCII字符集,那么在char和byte之间直接进行转换很简单,只需忽略char类型的高位字节即可,但是对于Unicode编码字符是不可用的。因此,字节流不适合处理基于字符的I/O。

另外,有时程序员还希望以二进制的形式读取,这样更加方便用户处理数据。如果使用字节流处理二进制,那么必须进行二进制数据和字节数据的转换。例如,浮点整型数据就是二进制数据,如果用户需要处理浮点整型数据,那么就需要在字节流中将浮点整型数据和字节数据进行转换。这样势必会给开发者带来麻烦,因此可以说字节流也不是很适合处理二进制数据。

为了解决数据的格式问题,C#定义了一些类,它们将字节数据流转换为字符数据流或者将字节数据流转换成二进制数据流。图7-2根据不同的数据格式,对.NET数据流进行了分类。

也都以相同的方式工作,因此.NET的I/O系统能够应用于许多类型的设备,例如用来输出到控制台的方法也能够用来输出到磁盘文件。I/O系统的数据流如图7-1所示。

 
图7-2  数据流分类
字节流、字符流以及二进制流的分类分别如图7-3、图7-4和图7-5所示。
posted @ 2010-04-03 22:07  逆时针  阅读(968)  评论(0编辑  收藏  举报