node中流的理解

2021-09-26 23:32:35 字數 1339 閱讀 9915

對於前端同學來講流的概念還是不太好理解的。然而stream模組是node中乙個非常重要的模組。

node官方文件上是這麼描述的:流(stream)是一種在 node.js 中處理流式資料的抽象介面

那我們姑且這麼理解吧:流就是為我們提供了一套處理資料的工具。

readable - 可讀的流 (例如 fs.createreadstream()).

writable - 可寫的流 (例如 fs.createwritestream()).

duplex - 可讀寫的流 (例如 net.socket).

transform - 在讀寫過程中可以修改和變換資料的 duplex 流(例如zlib.createdeflate())

我們這裡只討論可讀流和可寫流。

可讀流可讀流有兩種模式:

流動模式

從系統底層讀取資料並push()到快取池,達到highwatermark後 push() 返回 false,資源停止流向快取池,並觸發data事件消費資料。

切換到flowing模式的方法:

監聽data事件

呼叫stream.resume()方法

呼叫stream.pipe()方法將資料傳送到 writable

暫停模式

stream 預設是paused模式,必須顯式呼叫stream.read()方法來從流中讀取資料。每一次資料達到快取池都會觸發一次 readable 事件,也就是每一次 push() 都會觸發 readable。

切換到paused模式的方法:

監聽readable事件

如果不存在管道目標(pipe destination),呼叫 stream.pause()

如果存在管道目標,取消 data 事件監聽,並呼叫 stream.unpipe() 方法移除所有管道

我們前言部分的**就可以稍稍改造一下啦!

複製**可寫流

原理與 readable stream 是比較相似的,資料流過來的時候,會直接寫入到資源池,當寫入速度比較緩慢或者寫入暫停時,資料流會進入佇列池快取起來

當生產者寫入速度過快,把佇列池裝滿了之後,就會出現「背壓」,這個時候是需要告訴生產者暫停生產的,當佇列釋放之後,writable stream 會給生產者傳送乙個 drain 訊息,讓它恢復生產。

nodejs中流 stream 的理解

nodejs的fs模組並沒有提供乙個copy的方法,但我們可以很容易的實現乙個,比如 var source fs.readfilesync path to source fs.writefilesync path to dest source 如上面高大上的所示,我們把檔案比作裝水的桶,而水就是檔案...

Nodejs中流的操作

fs與流都可以處理檔案,為什麼還要用流 fs模組處理檔案的缺點 將檔案的資料全讀到記憶體中,在把資料寫到檔案內,會大量占用記憶體 流 流 stream 是 node.js 中處理流式資料的抽象介面,是一組有序的,有起點和終點的位元組資料傳輸手段。可以實現將資料從乙個地方流動到另乙個地方,其邊讀取邊寫...

UART通訊中流控RTS和CTS的理解

一 流控,顧名思義就是流量控制的意思。目的是協調收發雙方,使資料不會丟失。二 很多人用了串列埠很久都不知道這回事,這是因為很多場合確實沒有必要。收發雙方波特率固定,並且接受陣列足夠大,這時不會出現接收方接受陣列溢位導致資料丟失的情況,所以,以我的理解,使用流控的主要目的就是在資料量大,有可能出現接受...