C#中数据流(文件流、内存流、网络流等)相关知识点梳理
基本概念
C#中數(shù)據(jù)流的應(yīng)用體現(xiàn)在方方面面,現(xiàn)在針其常用的幾種類進(jìn)行一次梳理。
數(shù)據(jù)流包括文件流(FileStream)、內(nèi)存流(MemoryStream)、網(wǎng)絡(luò)流(NetworkStream)以及讀寫流如StreamReader、StreamWriter、BinaryReader和BinaryWriter等。
數(shù)據(jù)流是什么?
按照定義,數(shù)據(jù)流是是對(duì)串行傳輸數(shù)據(jù)的一種抽象表示,是對(duì)I/O的一種抽象。我們可以通過(guò)將文件夾數(shù)據(jù)、代碼生成結(jié)果、設(shè)備、內(nèi)存等各種形式的數(shù)據(jù)用流的方式進(jìn)行傳輸。從程序的角度出發(fā),如果將數(shù)據(jù)從來(lái)源取出,可以用StreamReader把數(shù)據(jù)儲(chǔ)存在內(nèi)存緩沖區(qū);如果將數(shù)據(jù)寫入目的地,可以使用StreamWriter把內(nèi)存緩沖區(qū)的數(shù)據(jù)寫入目標(biāo)地址。
數(shù)據(jù)流的操作包括寫、讀,查找,其寫入和讀取操作都是基于字節(jié)的。
Stream是一種虛擬類,是所有數(shù)據(jù)流的基類,無(wú)法創(chuàng)建實(shí)例。
FileStream
FileStream類主要用于讀寫磁盤文件,其讀寫方法如下所示:
//文件流讀取FileStream fileStream = File.Open(@"D:\Key.txt", FileMode.Open);//初始化待讀取文件流byte[] array = new byte[fileStream.Length];//初始化字節(jié)數(shù)組,用來(lái)存儲(chǔ)讀取到的字節(jié)fileStream.Read(array, 0, array.Length);//讀取文件流中數(shù)據(jù),寫入到字節(jié)數(shù)組中fileStream.Close(); //關(guān)閉流string str = Encoding.Default.GetString(array);//將字節(jié)數(shù)組內(nèi)容轉(zhuǎn)化為字符串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類是專門用來(lái)處理服務(wù)器與客戶端通信的流。它在網(wǎng)絡(luò)編程中經(jīng)常使用,主要是用來(lái)處理類似Socket、TcpClient和TcpListener這些類中得到的流。
SocketClient = Listener.AcceptSocket(); //等待客戶端的socket NetStream = new NetworkStream(SocketClient); //有客戶端連接成功后,創(chuàng)建網(wǎng)絡(luò)流 ServerReader = new StreamReader(NetStream); //讀數(shù)據(jù) ServerWriter = new StreamWriter(NetStream); //寫數(shù)據(jù)MemoryStream
MemoryStream類用于保存數(shù)據(jù)到內(nèi)存中并可以直接訪問內(nèi)存數(shù)據(jù)。比如說(shuō)網(wǎng)絡(luò)中傳輸數(shù)據(jù)時(shí)可以用流的形式,當(dāng)我們收到這些流數(shù)據(jù)時(shí)就可以用MemoryStream類來(lái)存儲(chǔ)處理。內(nèi)存流相對(duì)于字節(jié)數(shù)組而言,具有流特有的特性,并且容量可自動(dòng)增長(zhǎng),在數(shù)據(jù)加密以及對(duì)長(zhǎng)度不定的數(shù)據(jù)進(jìn)行緩存等場(chǎng)合,使用內(nèi)存流比較方便。
內(nèi)存流有多種構(gòu)造函數(shù),都有不同的作用,但基本都是對(duì)內(nèi)存流容量的定義。
總結(jié)
以上是生活随笔為你收集整理的C#中数据流(文件流、内存流、网络流等)相关知识点梳理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#中json序列化与反序列化
- 下一篇: C#常见编码方式总结