Wiki說得好:
「流」是一連串從I/O設備讀寫的字符(Byte)。
流(Stream)是.NET中非常基礎的型態,存取方式是很單純的位元組依序寫入/讀出(Byte by Byte Writing/Reading),會有一個內藏Counter紀錄住目前存取位置(Position,有點類似座標),存取時都是從目前位置開始存取.
若將整個讀取完畢的Stream攤平開來,也是可以想像成時域信號圖,橫軸是位置,只是要確定好座標原點(Origin)在何處
跟位元組陣列有著類似的概念,只是位元組陣列可以隨機存取:給定INDEX存取,座標原點就是第一個元素,只需一個存取動作:給定INDEX後返回該位置的資料;若要做類似隨機存取操作,Stream必須先透過Seek改變目前位置,才能開始存取,因此需要兩個存取動作:改變目前位置、存取資料
Stream存的個別元素是位元組,也就是0-255之間的一個數值,可以說是資訊系統內超級底層的資料型態之一,也就是說Stream是一種極為基礎的資料儲存結構;任何的高階資料型態(物件、字串)都能轉換成位元組形式去表達(某種映射):
- 物件-位元組轉換(物件與位元組之間的映射)
- 序列化與反序列化(Serialization/Deserialization)
- 而反序列化/序列化則是互為反函式(Inverse)
- 字元-位元組轉換(字元與位元組之間的映射)
- 按字碼表Encoding/Decoding
- 線性映射?
後續應用就視情況看是要透過反序列化還是Decoding,轉換成更高階的資料表達型態
.NET的類別規劃上,可以在相關的硬體抽象物件找到Stream的身影,好比說以下衍生自Stream的型別:
- FileStream (檔案輸出入
- MemoryStream (我當它是模擬I/O裝置,基礎資料流儲存在主記憶內
- NetworkStream(透過網路介面輸出入
- PipeStream(程序間溝通應用
參考:這系列對於Stream介紹蠻不錯