探索流(Stream)的概念

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

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

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

其詳細介紹,我想經過另一篇專門介紹。因此這裏之介紹和流相關的內容。更多內容能夠訪問: http://www.yaml.org/網絡

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

  • YAML enables stream-based processing.

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

在流媒體中,有一個很是重要的特色,那就是數據量極大!因爲這點,致使不能緩存全部的數據。因此對流的定義,都圍繞着這個特色提出:設計

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

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

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

不過上面的概念,僅僅停留在最初的流的概念上。後來的各類語言發展過程當中,將不少序列化的線型數據,都當成流來處理。下面是通常狀況下Stream定義的方法:it

  1. Seek
  2. Read
  3. Write

在各類類型的流中,最基本的就是FileStream。我的覺得這個流被如今不少的人理解歪了。首先,FileStream應該出自於Unix中的概念,由於Unix將全部設備都歸爲File,包括網絡、顯卡、文件、USB等等。但在Windows中並無這樣默認的概念。

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

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

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

相關文章
相關標籤/搜索