MemoryStream類讀寫內存


  和FileStream一樣,MemoryStream和BufferedStream都派生自基類Stream,因此它們有很多共同的屬性和方法,但是每一個類都有自己獨特的用法。這兩個類都是實現對內存進行數據讀寫的功能,而不是對持久性存儲器進行讀寫。
  讀寫內存-MemoryStream類
  MemoryStream類用於向內存而不是磁盤讀寫數據。MemoryStream封裝以無符號字節數組形式存儲的數據,該數組在創建MemoryStream對象時被初始化,或者該數組可創建為空數組。可在內存中直接訪問這些封裝的數據。內存流可降低應用程序中對臨時緩沖區和臨時文件的需要。下表列出了MemoryStream類的重要方法:
  1、Read(byte[] buffer, int offset, int count)從當前流(MemoryStream對象)中讀取字節塊並將數據寫入緩沖區中

  參數:

    buffer,當此方法返回時,包含指定的字節數組,該數組中從 offset 到 (offset + count -1) 之間的值由從當前流中讀取的字符替換。

    offset, buffer 中的從零開始的字節偏移量,從此處開始存儲從當前流中的數據;

    count,最多讀取的字節數;

  返回值:

  類型:System.Int32

  寫入緩沖區中的總字節數。 如果當前可用字節數不到所請求的字節數,則這一總字節數可能小於所請求的字節數,或者如果在讀取任何字節前已到達流的末尾,則為零。
  2、ReadByte():從當前流(MemoryStream流)中讀取一個字節。

  返回值 :

  類型:System.Int32

  強制轉換為 Int32 的字節;或者如果已到達流的末尾,則為 -1。
  3、Write(byte[] buffer, int offset, int count)使用從某個緩沖區讀取的數據將字節塊寫入當前流

  參數:

    buffer:從中寫入數據的緩沖區。

    offset:buffer 中的從零開始的字節偏移量,從此處開始將字節復制到當前流。

    count:最多寫入的字節數。
  4、WriteByte(byte value)將一個字節寫入當前流中的當前位置

  參數:

    value:寫入的字節。
  Read方法使用的語法如下:

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

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

  MemoryStream類的使用實例:

using System;
using System.IO;
using System.Text;
class program
{
    static void Main()
    {
        int count;
        byte[] byteArray;
        char[] charArray;
        UnicodeEncoding uniEncoding = new UnicodeEncoding();
        byte[] firstString = uniEncoding.GetBytes("努力學習");
        byte[] secondString = uniEncoding.GetBytes("不做C#中的菜鳥");
        using (MemoryStream memStream = new MemoryStream(100))
        {
            memStream.Write(firstString, 0, firstString.Length);
            count = 0;
            while (count < secondString.Length)
            {
                memStream.WriteByte(secondString[count++]);
            }
            Console.WriteLine("Capacity={0},Length={1},Position={2}\n", memStream.Capacity.ToString(), memStream.Length.ToString(), memStream.Position.ToString());
            memStream.Seek(0, SeekOrigin.Begin);
            byteArray = new byte[memStream.Length];
            count = memStream.Read(byteArray, 0, 20);
            while (count < memStream.Length)
            {
                byteArray[count++] = Convert.ToByte(memStream.ReadByte());
            }
            charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)];
            uniEncoding.GetDecoder().GetChars(byteArray, 0, count, charArray, 0);
            Console.WriteLine(charArray);
            Console.ReadKey();
        }
    }
}

  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編碼后輸出到控制台。   

  來源:http://developer.51cto.com/art/201105/263356.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM