[韓小明]探索流(Stream)的概念

      從一開始接觸,就感覺流(Stream)是一個非常抽象的概念。在C語言中,有三個標準流:StdIn,StdOut,StdErr。那個時候的感覺,用我的L同事的話來說,流就是一個神祕的洞。

我一直在探究流的概念。到底什麼是流,流有什麼特點,Delphi中的TStream到底和真正的流的概念相差多少?可惜一直沒有合理的答案發現。

前一段時間,開始對YAML 有了興趣。在這裏也順便對YAML 進行簡單的介紹。YAML 是一個可供人閱讀的數據序列化格式。其類似於XML的作用。但是其存儲格式採用語言結構存儲。所以其同樣是機器可讀的格式(方便編程)。

其詳細介紹,我想通過另外一篇專門介紹。所以這裏之介紹和流相關的內容。更多內容可以訪問: http://www.yaml.org/

在Yaml的設計目標中有這樣的描述:

  • YAML enables stream-based processing.

這裏面要注意的就是stream-based processing。我對此進行了繼續的探索,發現流的概念最基本的是在流媒體中出現的。電視、音樂、視頻等等都是以流的方式進行處理。而且有專門的處理這些數據流的芯片,叫DSP(Digital Signal Processor)。

在流媒體中,有一個非常重要的特點,那就是數據量極大!由於這點,導致不能緩存所有的數據。所以對流的定義,都圍繞着這個特點提出:

  • 流數據讀取的方向是單一的
  • 流數據不能往回讀取
  • 流數據的緩存非常少

所謂“落花有意,流水無情”,流過的水,是不能回頭的。也正是這一點,才成就了“流”這個特殊的概念。我認爲當初這個概念的翻譯非常到位。或者說中外在這方面都有共同的認識。

綜合上面所說,可以總結認爲,流的最大概念在於單向處理。

不過上面的概念,僅僅停留在最初的流的概念上。後來的各種語言發展過程中,將很多序列化的線型數據,都當成流來處理。下面是一般情況下Stream定義的方法:

  1. Seek
  2. Read
  3. Write

在各種類型的流中,最基本的就是FileStream。個人以爲這個流被現在很多的人理解歪了。首先,FileStream應該出自於Unix中的 概念,因爲Unix將所有設備都歸爲File,包括網絡、顯卡、文件、USB等等。但在Windows中並沒有這樣默認的概念。

我之所以說很多人將FileStream用錯了,是因爲,很多文件的存儲格式是非Stream-Based的,多爲結構化存儲,因此在處理這些文件的時候,必然需要Seek來回操作。使用了流的處理類,但卻並不是流的理念去操作的。

還有就是MemoryStream的概念,就更誇張了。它基本上是用來作爲一個連續的二進制存儲區域而已。除非我們可以將流的概念擴展開來,包含二進制數據存儲格式。

好了,基本上對流的概念有了比較基礎的瞭解了。不過這裏,我想對咱們中國的計算機業倡議一下,我們需要把一些基礎的概念做一些明確的概念,就免得好學者這麼地去茫然理解了。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1544613

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章