基本概念
C#中数据流的应用体现在方方面面,现在针其常用的几种类进行一次梳理。
数据流包括文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)以及读写流如StreamReader、StreamWriter、BinaryReader和BinaryWriter等。
数据流是什么?
按照定义,数据流是是对串行传输数据的一种抽象表示,是对I/O的一种抽象。我们可以通过将文件夹数据、代码生成结果、设备、内存等各种形式的数据用流的方式进行传输。从程序的角度出发,如果将数据从来源取出,可以用StreamReader把数据储存在内存缓冲区;如果将数据写入目的地,可以使用StreamWriter把内存缓冲区的数据写入目标地址。
数据流的操作包括写、读,查找,其写入和读取操作都是基于字节的。
Stream是一种虚拟类,是所有数据流的基类,无法创建实例。
FileStream
FileStream类主要用于读写磁盘文件,其读写方法如下所示:
//文件流读取FileStream fileStream = File.Open(@"D:\Key.txt", FileMode.Open);//初始化待读取文件流byte[] array = new byte[fileStream.Length];//初始化字节数组,用来存储读取到的字节fileStream.Read(array, 0, array.Length);//读取文件流中数据,写入到字节数组中fileStream.Close(); //关闭流string str = Encoding.Default.GetString(array);//将字节数组内容转化为字符串Console.WriteLine(str);//写文件流byte[] array1 = new byte[1024];array1 = Encoding.UTF8.GetBytes(str);FileStream fileStream1 = new FileStream(@"D:\Key.txt", FileMode.OpenOrCreate, FileAccess.Write);fileStream1.Write(array1, 0, array1.Length);
NetWorkStream
NetWorkStream类是专门用来处理服务器与客户端通信的流。它在网络编程中经常使用,主要是用来处理类似Socket、TcpClient和TcpListener这些类中得到的流。
SocketClient = Listener.AcceptSocket(); //等待客户端的socket
NetStream = new NetworkStream(SocketClient); //有客户端连接成功后,创建网络流
ServerReader = new StreamReader(NetStream); //读数据
ServerWriter = new StreamWriter(NetStream); //写数据
MemoryStream
MemoryStream类用于保存数据到内存中并可以直接访问内存数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以用MemoryStream类来存储处理。内存流相对于字节数组而言,具有流特有的特性,并且容量可自动增长,在数据加密以及对长度不定的数据进行缓存等场合,使用内存流比较方便。
内存流有多种构造函数,都有不同的作用,但基本都是对内存流容量的定义。
MemoryStream myStream = new MemoryStream();//将待写入数据从字符串转换为字节数组UnicodeEncoding encoder = new UnicodeEncoding();byte[] bytes = encoder.GetBytes("魑魅魍魉);//向内存流中写入数据for (int i = 0; i < 10; i++){Console.WriteLine("第{0}写入新数据", i);myStream.Write(bytes, 0, bytes.Length);}