C#流的概念

注意:

1、在计算机编程中,流就是一个类的对象,很多文件的输入输出操作都以类的成员函数的方式来提供。

2、计算机中的流其实是一种信息的转换。它是一种有序流,因此相对于某一对象,通常我们把对象接收外界的信息输入(Input)称为输入流,相应地从对象向外输出(Output)信息为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时总是先将对象或数据转换为某种形式的流,再通过流的传输,到达目的对象后再将流转换为对象数据。所以,可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。

3、程序中流的概念和操作系统中流的概念是不一样的,操作系统中的流可以看成是数据流,而程序中的流的概念其实是一个用来处理流的类。

4、流就是在内存中操作数据的一种方式

5、.net中有多种多样的流类型

6、C#里有很多封装类不一定都要用流。

.NET Framework中进行的所有输入、输出工作都要用到流,流是计算机的输入和输出之间运动的数据的序列。流的概念源于unix中管道的概念。在unix中,管道是一条不间断的字节流。用来实现程序或进程间的通信,可读写外围设备、外部文件等。

C#流的概念可以和生活中的流相对应。在生活中有水流、电流等,首先要有一个源头,还需要有传输的管道。水流有河,水管作为传输管道,电流有电线,而这些流都会有一个目的,就是它的流向。C#的流也需要源泉——文件,数据流入流出管道以及数据的流向。

C#采用流模型读写文件数据,按照流的方向把流分为两种:输入流和输出流。输入流用于将数据序列可以访问的内存或变量中。输入流可以来自任何源,在些主要分析读取磁盘文件,可以理解为以文件为源,以内存为目的地。输出流用于向某些外部目标写入数据,可以是磁盘文件,打印设备或另一个程序。在此主要关注以内存为源,文件为目的的输出流。

C# 流相关的类层次结构:

System.Object | -- System.MarshalByRefObject |-- Stream

| | |-- BufferedStream

| | |-- MemoryStream

| | |-- FileStream 【文件流】

| |-- TextReader

| | |-- StringReader

| | |-- StreamReader【流读取器】

| |-- TextWriter

| |-- StringWriter

| |-- StreamWriter【流写入器】

|-- BinaryReader

|-- BinaryWriter

对于文件的读写,最常用的类简单介绍如下:

Stream类:流的基类,定义流的基本操作。

FileStream类:用于对文件执行读写操作,支持同步和异步读写。

MemoryStream类:无缓存的流,该流以内存作为数据流。

NetWorkStream类:以网络为数据源的流,可以通过此流发送或接收网络数据。

TextReader类:StreamReader对象的抽象基类,定义基本字符读取操作。

TextWriter类:StreamWriter对象的抽象基类,定义基本字符写入操作。

StreamWriter类:向流写入字符。

StreamReader类:实现从流读取字符操作。