国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于c#流

2019-11-17 02:19:47
字體:
來源:轉載
供稿:網友

關于c#流

C#流的簡單認識前言

本篇文章簡單總結了在C#編程中經常會用到的一些流。比如說FileStream、MemoryStream、 BufferedStream、 NetWorkStream、 StreamReader/StreamWriter、 TextReader/TextWriter等的簡單用法。

內容

一 FileStream類

FileStream類主要用于讀取磁盤上的文件或者向磁盤文件寫入信息。有時,我們需要將程序中的一些數據存儲到磁盤上或是讀取配置文件中某些內容,在這里我們就會用該類。

從磁盤上的文件中讀取內容:

FileStream讀取文件:

1 FileStream file = File.Open(@"F:/file.txt", FileMode.Open); //初始化文件流2 byte[] array = new byte[file.Length];//初始化字節數組3 file.Read(array, 0, array.Length);//讀取流中數據把它寫到字節數組中4 file.Close();//關閉流5 string str = Encoding.Default.GetString(array);//將字節數組內容轉化為字符串6 Console.WriteLine(str);

  

將數據寫入磁盤文件:

1 1 FileStream file = File.Open(@"F:/file.txt", FileMode.Append);//初始化文件流2 2 byte[] array = Encoding.UTF8.GetBytes("Hello World!你好");//給字節數組賦值3 3 file.Write(array, 0, array.Length);//將字節數組寫入文件流4 4 file.Close();//關閉流
FileStream寫入文件

二 MemoryStream類

MemoryStream類主要用于操作內存中的數據。比如說網絡中傳輸數據時可以用流的形式,當我們收到這些流數據時就可以聲明MemoryStream類來存儲并且處理它們。

MemoryStream操作字符串:

1 string str = "Hi!你好!";2 byte[] array = Encoding.UTF8.GetBytes(str);//將字符串轉化為字節數組3 MemoryStream memory = new MemoryStream(array);//初始化MemoryStream類4 byte[] arrayNew = memory.ToArray();//將內存中的數據轉換為字節數組5 string strNew = Encoding.UTF8.GetString(arrayNew);//將字節數組轉換為字符串
MemoryStream解析數據

三 BufferedStream類

BufferedStream類主要也是用來處理流數據的,但是該類主要的功能是用來封裝其他流類。為什么要封裝其他流類,這么做的意義是什么?按照微軟的話說主要是減少某些流直接操作存儲設備的時間。對于一些流來說直接向磁盤中存儲數據這種做法的效率并不高,用BufferedStream包裝過的流,先在內存中進行統一的處理再向磁盤中寫入數據,也會提高寫入的效率。

將磁盤上的一個文件寫入到磁盤上的另一個文件中:

 1 1 FileStream file1 = File.Open(@"F:/file1.txt", FileMode.OpenOrCreate,Fileaccess.Read);//讀取文件流 2  2 FileStream file 2= File.Open(@"F:/file2.txt", FileMode.OpenOrCreate,FileAccess.Write);//寫入文件流 3  3  4  4 byte[] array = new byte[4096]; 5  5        6  6 BufferedStream bufferedInput = new BufferedStream(file1);//封裝文件流 7  7 BufferedStream bufferedOutput = new BufferedStream(file2);//封裝文件流 8  8  9  9 bufferedInput.Read(array, 0, array.Length);10 10 bufferedOutput.Write(array, 0, array.Length);11 11 12 12 int bytesRead = 0;13 13 while ((bytesRead = bufferedInput.Read(array, 0, 4096)) > 0)//讀取到了數據14 14   {15 15     bufferedOutput.Write(array, 0, bytesRead);16 16     Console.WriteLine(bytesRead);17 17    }18 18 bufferedInput.Close();//關閉各種流19 19 bufferedOutput.Close();20 20 file1.Close();21 21 file2.Close();
BufferedStream封裝流

實際測試中,封裝流的方法在效率上并沒有太多的提升。使用其他流也可以封裝文件流。如果想要保證不頻繁的讀取磁盤其實只要保證代碼不這樣做就可以了,所以其實在代碼上多加控制,也能保證程序不會經常的操作磁盤。

四 NetWorkStream類

NetWorkStream類是專門用來處理服務器與客戶端通信的流。它在網絡編程中經常使用,主要是用來處理類似Socket、TcpClient和TcpListener這些類中得到的流。

簡單的TCP同步方式服務器與客戶端通信:

 1 1 TcpListener lis=new TcpListener(5000); //服務器監聽 2  2 lis.Start();//啟動 3  3 Socket sock=lis.AcceptSocket();//阻塞,直到有客戶端連接 4  4  5  5 NetworkStream networkStream = new NetworkStream(sock);//得到Socket中的流 6  6 if (netStream.DataAvailable)   //如果客戶端發送了消息 7  7 { 8  8    byte[] data = new byte[1024];   //定義一個字節數組,用來存放接收的數據 9  9    int len = netStream.Read(data, 0, data.Length);  //從位置開始,讀取到字節數組末尾10 10    string line = Encoding.Default.GetString(data, 0, len);  //把收到的字節轉換為字符串11 11 }
服務器

1 1 TcpClient client = new TcpClient();//客戶端tcp對象2 2 client.Connect("127.0.0.1", 5000);//連接服務器3 3 NetworkStream myStream = client.GetStream();//得到網絡流4 4                 5 5 byte[] data = Encoding.Default.GetBytes("Hi,你好");  //首先把輸入的字符串消息轉換為字節6 6 myStream .Write(data, 0, data.Length);  //向myStream 里寫入數據7 7 myStream .Flush();  //刷新流中的數據8 8 myStream .Close();
客戶端

五 StreamReader/StreamWriter類

StreamReader/StreamWriter主要用來處理流數據。它們分別提供了高效的流讀取/寫入功能。

讀取與寫入:

 1 1 StreamReader reader = new StreamReader("filePath");//初始化讀取 2  2 StreamWriter writer = new StreamWriter("filePath");//初始化寫入 3  3  4  4 string readStr=reader.ReadLine();//從流中讀取一行 5  5 string readAff = reader.ReadToEnd();//從流中讀取全部 6  6  7  7 writer.Write("Hi 你好");//寫入內容 8  8 writer.WriteLine("Hi 你好");//寫入一行 9  9 10 10 reader.Close();//關閉流11 11 writer.Close();
StreamReader/Writer讀寫

六 TextReader/TextWriter類

TextReader/TextWriter類主要用來處理流數據。它們分別提供了高效的文本流讀取/寫入功能。

讀取與寫入:

 1  1 TextReader textReader = new StringReader("Hi 你好");//初始化讀取流 2  2 TextWriter textWriter = new StringWriter();//初始化寫入流 3  3  4  4 char[] c=new char[4096]; 5  5 int chars = 0; 6  6 while ((chars = textReader.Read(c, 0, 4096)) > 0)//把流中數據寫入到字符數組中 7  7 { 8  8    textWriter.Write(c, 0, 4096);//從字符數組中讀取流 9  9 }10 10 11 11 string str= textWriter.ToString();//將流中數據寫到字符串中12 12 textReader.Close();//關閉流13 13 textWriter.Close();
TextReader/Writer讀寫

注意事項:

1.流使用后必須要關閉。

2.把流中數據加載到內存時要考慮內存溢出等問題。

分類: C#
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中卫市| 万载县| 托克托县| 香格里拉县| 古丈县| 洪湖市| 越西县| 奉新县| 临桂县| 乌鲁木齐县| 苍南县| 泾阳县| 响水县| 临湘市| 巴塘县| 澜沧| 满洲里市| 区。| 南江县| 宜州市| 汉沽区| 乐都县| 老河口市| 栖霞市| 镇沅| 长泰县| 高邮市| 抚州市| 京山县| 麦盖提县| 建宁县| 奉新县| 绥滨县| 辉南县| 望奎县| 正安县| 阜康市| 封开县| 栾城县| 托克托县| 睢宁县|