Stream - 資料流類別

資料流是.NET平台支援各種來源的資料存取最重要的核心技術,藉由整合 System.IO 命名空間的資料流類別架構,可以輕易的建構包含記憶體、檔案、網路甚至加解密等資料存取功能。

Strem 類別是最基礎的資料流類別,其底下衍生幾個重要的類別,包含記憶體資料流(MemoryStream)、檔案資料流(FileStream)以及緩衝資料流(BufferedStream),支援各種型式的資料處理作業。下表列舉簡要的說明:

衍生類別說明
MemoryStream被設計用以存取記憶體裏的位元組資料。
FileStream被設計用以讀寫檔案系統上的資料。
BufferedStream此類別讓你能夠直接由記憶體緩衝區存取位元組資料,比起上述幾個資料流類別,使用BufferedStream類別存取資料在效能上的表現也較為出色。

Stream類別為其他位元組資料流的基底類別,提供一般資料流通用的位元組資料存取方法與相關屬性成員,這個類別本身是一個抽象類別,因此,你沒有辦法直接使用這個類別建立實體物件進行資料流的操作,這些操作包含了從資料流中讀取資料、將資料寫入資料流,或是從資料流中搜尋特定資料所在位置等等,通常藉由其衍生類別,例如 FileStream 來完成。

Stream 類別與資料讀寫

Stream 類別所定義的方法,分為讀取與寫入操作,以下列舉說明之。

讀取位元組方法是 ReadByte,自資料流中讀取目前位置的下一個位元組,並且回傳一個整數型態的值,這個方法於檔案結尾的時候,傳回一個 -1 的值,有兩個多載的版本,列舉如下:
int ReadByte() 
Int ReadByte(byte[] bufByte, int offset, int intBytes)
第二個版本的方法一共接受三個參數,第二個整數型別參數 offset 表資料流中開始讀取位元組資料的位置, intBytes 則表示欲讀取的位元組數目,第一個參數 bufByte 為一位元組陣列,用以儲存所取得的資料。

寫入位元組方法是 Write,將資料寫入資料流,定義如下:
void Write(byte[] bufByte, int offset, int intBytes)
此方法接受的三個參數意義同上述第二個版本的 ReadByte 方法,從 offset 開始,將 bufByte 陣列物件寫入, intBytes 為所要寫入的位元組數目。

Stream 類別與資料流操作

針對資料流的操作, Stream 類別亦提供了對應的方法,列舉說明如下:

Seek:此方法重設目前資料流的位置,定義如下:
long Seek(long offset , SeekOrigin origin)
參數 origin 代表原來的位置, offset 為新的位置,SeekOrigin 為一列舉型別,代表資料流搜尋時的相對參考位置,三個列舉值如下表:

列舉成員說明
Begin代表資料流的起始點。
Current代表資料流目前的位置。
End資料流的終點。

Close:關閉資料流。

Flush:出清資料流,將資料流中的位元資料寫入指定的目標裝置。

以上為 Stream 類別比較重要的幾個方法,這些方法本身受限於資料的存取特性,不一定可以完全支援,例如以唯讀的方式開啟資料流,則其中寫入資料的相關方法,便不會被支援。



沒有留言: