1. 程式人生 > >關於 流(Stream) 的概念理解

關於 流(Stream) 的概念理解

c#語言 常用 重要 其他 設備 用戶 數據 的人 基類

什麽是流,我認為流就是對IO設備的一種抽象。流將各種千差萬別的設備統一抽象成一種模型,向用戶提供一個統一的編程接口,用戶無需了解設備內部細節,就可完成對設備的IO操作,大大簡化開發難度。

流這個概念很重要,很大一部分初涉獵編程的人(包括我),犯眼高手低的錯誤,認為流不就是對控制臺,文件的讀寫操作嗎?其實不然,流也是一個非常重要的編程思想,就像面向對象一樣,要深刻理解貫徹在腦子裏。要具備對 流 足夠的理論知識,才能遊刃有余的面對各種數據IO問題。

廢話少說。

c#語言裏,所有的流類型 的基類是 Stream。

Stream是以一個抽象類,由它派生的常用類有:

MemoryStream:對內存進行讀取與寫入

BufferedStream:對緩沖器進行讀取/寫入

FileStream:對文件執行讀取與寫入

流作為對IO設備的一種抽象,不僅是對設備數據的一種緩沖容器,自然也應該具備對設備的讀寫操作,基本方法有:

Read/Write :讀寫buffer

ReadByte/WriteByte:讀寫字節

Seek:設置讀寫位置

由於流的讀寫操作有功能上的局限性,所以對流有 Reader/Writer,來豐富對流的讀寫操作。

c#有TextReader/Writer,BinaryReader/Writer,顧名思義分別為字符流讀寫和字節流讀寫。

其中TextReader/Writer是一個抽象類,由它派生的有StreamReader/Writer,StringReader/Writer,後者不對流進行讀寫操作,所以一般常用前者來讀寫字符流。

BinaryReader/Writer可以直接拿來用。

其他:

我覺得 流 更像是用戶與設備之間的“數據通道”,是一種數據的中間容器,不一定緩存設備中的所有數據,但可以允許用戶訪問設備的所有數據。

其實所有的問題來自於:為什麽WebResponse的最終返回給用戶的是一個stream,而不是string?

一個解釋是response流不一定是字符流,也可以是字節流(這一點確實之前太先入為主了,總是認為服務端返回的是一組字符串)

其二是當response流數據量較大時,考慮到性能問題,不可能一下子將所有數據拿回到用戶端上,用流來做中間緩沖。

關於 流(Stream) 的概念理解