1. 程式人生 > >C#使用MemoryStream類讀寫記憶體

C#使用MemoryStream類讀寫記憶體

MemoryStream和BufferedStream都派生自基類Stream,因此它們有很多共同的屬性和方法,但是每一個類都有自己獨特的用法。這兩個類都是實現對記憶體進行資料讀寫的功能,而不是對永續性儲存器進行讀寫。

 

讀寫記憶體-MemoryStream類

MemoryStream類用於向記憶體而不是磁碟讀寫資料。MemoryStream封裝以無符號位元組陣列形式儲存的資料,該陣列在建立MemoryStream物件時被初始化,或者該陣列可建立為空陣列。可在記憶體中直接訪問這些封裝的資料。記憶體流可降低應用程式中對臨時緩衝區和臨時檔案的需要。

 

下表列出了MemoryStream類的重要方法:

1、Read():讀取MemoryStream流物件,將值寫入快取區。

2、ReadByte():從MemoryStream流中讀取一個位元組。

3、Write():將值從快取區寫入MemoryStream流物件。

4、WriteByte():從快取區寫入MemoytStream流物件一個位元組。

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.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        { 
            int count; 
            byte[] byteArray; 
            
char[] charArray; UnicodeEncoding uniEncoding = new UnicodeEncoding(); // Create the data to write to the stream. byte[] firstString = uniEncoding.GetBytes("一二三四五"); byte[] secondString = uniEncoding.GetBytes("上山打老虎"); using (MemoryStream memStream = new MemoryStream(100)) { // Write the first string to the stream. memStream.Write(firstString, 0, firstString.Length); // Write the second string to the stream, byte by byte. count = 0; while (count < secondString.Length) { memStream.WriteByte(secondString[count++]); } // Write the stream properties to the console. Console.WriteLine("Capacity={0},Length={1},Position={2}\n", memStream.Capacity.ToString(), memStream.Length.ToString(), memStream.Position.ToString()); // Set the position to the beginning of the stream. memStream.Seek(0, SeekOrigin.Begin); // Read the first 20 bytes from the stream. byteArray = new byte[memStream.Length]; count = memStream.Read(byteArray, 0, 20); // Read the remaining bytes, byte by byte. while (count < memStream.Length) { byteArray[count++] = Convert.ToByte(memStream.ReadByte()); } // Decode the byte array into a char array // and write it to the console. charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)]; uniEncoding.GetDecoder().GetChars(byteArray, 0, count, charArray, 0); Console.WriteLine(charArray); Console.ReadKey(); } } } }