對於前端同學來講流的概念還是不太好理解的。然而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的理解
一 流控,顧名思義就是流量控制的意思。目的是協調收發雙方,使資料不會丟失。二 很多人用了串列埠很久都不知道這回事,這是因為很多場合確實沒有必要。收發雙方波特率固定,並且接受陣列足夠大,這時不會出現接收方接受陣列溢位導致資料丟失的情況,所以,以我的理解,使用流控的主要目的就是在資料量大,有可能出現接受...