程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#使用MemoryStream類讀寫內存

C#使用MemoryStream類讀寫內存

編輯:關於C語言

和FileStream一樣,MemoryStream和BufferedStream都派生自基類Stream,因此它們有很多共同的屬性和方法,但是每一個類都有自己獨特的用法。這兩個類都是實現對內存進行數據讀寫的功能,而不是對持久性存儲器進行讀寫。

讀寫內存-MemoryStream類

MemoryStream類用於向內存而不是磁盤讀寫數據。MemoryStream封裝以無符號字節數組形式存儲的數據,該數組在創建MemoryStream對象時被初始化,或者該數組可創建為空數組。可在內存中直接訪問這些封裝的數據。內存流可降低應用程序中對臨時緩沖區和臨時文件的需要。下表列出了MemoryStream類的重要方法:

1、Read():讀取MemoryStream流對象,將值寫入緩存區。

2、ReadByte():從MemoryStream流中讀取一個字節。

3、Write():將值從緩存區寫入MemoryStream流對象。

4、WriteByte():從緩存區寫入MemoytStream流對象一個字節。

Read方法使用的語法如下:

  1. mmstream.Read(byte[] buffer,offset,count) 

其中mmstream為MemoryStream類的一個流對象,3個參數中,buffer包含指定的字節數組,該數組中,從offset到(offset +count-1)之間的值由當前流中讀取的字符替換。Offset是指Buffer中的字節偏移量,從此處開始讀取。Count是指最多讀取的字節數。Write()方法和Read()方法具有相同的參數類型。

MemoryStream類的使用實例:

  1. using System;  
  2. using System.IO;  
  3. using System.Text;  
  4. class program{  
  5. static void Main()  
  6. {  
  7. int count;  
  8. byte[] byteArray;  
  9. char[] charArray;  
  10. UnicodeEncoding unIEncoding=new UnicodeEncoding();  
  11. byte[] firstString=unIEncoding.GetBytes("努力學習");  
  12. byte[] secondString=unIEncoding.GetBytes("不做C#中的菜鳥");  
  13. using (MemoryStream memStream=new MemoryStream(100))  
  14. {  
  15. memStream.Write(firstString,0,firstString.Length);  
  16. count=0;  
  17. while(count<secondString.Length)  
  18. {  
  19. memStream.WriteByte(secondString[count++]);  
  20. }  
  21. Console.WriteLine("Capacity={0},Length={1},Position={2}\n",memStream.Capacity.ToString(),memStream.Length.ToString(),memStream.Position.ToString());  
  22. memStream.Seek(0, SeekOrigin.Begin);  
  23. byteArray=new byte[memStream.Length];  
  24. count=memStream.Read(byteArray,0,20);  
  25. while(count<memStream.Length)  
  26. {  
  27. byteArray[count++]=Convert.ToByte(memStream.ReadByte());  
  28. }  
  29. charArray=new char[unIEncoding.GetCharCount(byteArray,0,count)];  
  30. unIEncoding.GetDecoder().GetChars(byteArray,0,count,charArray,0);  
  31. Console.WriteLine(charArray);  
  32. Console.ReadKey();  
  33. }  
  34. }  

在這個實例代碼中使用了using關鍵字。注意:

using 關鍵字有兩個主要用途:

1、作為指令,用於為命名空間創建別名或導入其他命名空間中定義的類型。

例如:

  1. using System; 

2、作為語句,用於定義一個范圍,在此范圍的末尾將釋放對象。

  1. using(Connection conn=new Connection(connStr))  
  2. {  
  3. }  
  4. //使用using關鍵字可及時銷毀對象 

MemoryStream.Capacity 屬性 取得或設定配置給這個資料流的位元組數目。

MemoryStream.Position 屬性 指定當前流的位置。

MemoryStream.Length 屬性獲取用字節表示的流長度。

SeekOrigin()是一個枚舉類,作用設定流的一個參數。

SeekOrigin.Begin我得理解就是文件的最開始,“0”是偏移,表示跳過0個字節。寫2就是跳過2個字節。

MemoryStream類通過字節讀寫數據。本例中定義了寫入的字節數組,為了更好的說明Write和WriteByte的異同,在代碼中聲明了兩個byte數組,其中一個數組寫入時調用Write方法,通過指定該方法的三個參數實現如何寫入。

另一個數組調用了WriteByte方法,每次寫入一個字節,所以采用while循環來完成全部字節的寫入。寫入MemoryStream後,可以檢索該流的容量,實際長度,當前流的位置,將這些值輸出到控制台。通過觀察結果,可以確定寫入MemoryStream流是否成功。

調用Read和ReadByte兩種方法讀取MemoryStream流中的數據,並將其進行Unicode編碼後輸出到控制台。

【編輯推薦】

  1. 微軟MVP為您詳述ADO.Net連接池
  2. ADO.Net入門 五大你需要知道的對象
  3. 用C#實現HTTP協議下的多線程文件傳輸
  4. 關於C#委托你不可不知的幾件事
  5. 淺談C++調用C#的DLL程序方法
【責任編輯:QiHappy TEL:(010)68476606】
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved