基本概念
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);}