首頁技術文章正文

什么是文件流?Stream文件流有幾種類型?

更新時間:2022-07-08 來源:黑馬程序員 瀏覽量:

IT培訓班

通過前面的前端培訓學習可知,Node,js的 File System模塊并沒有提供一個copy 的方法,但是通過讀取文件和寫入文件的方式可以實現(xiàn),即把文件A的內(nèi)容全部讀入Bufer緩沖區(qū),然后再從緩沖區(qū)讀出寫入文件B,該過程的執(zhí)行流程圖如圖1所示。


1657266755117_61.png

圖1文件流復制過程

在圖1中,可以看判讀取數(shù)煙需要存放到Batfer 級沖區(qū)中,然后在從級沖區(qū)讀出寫入到文件,Bulfer緩沖區(qū)限制在1GB,這樣的慢作對于小型的文本文件,沒有多大的問題,但是對于體積較大的文件,比如音頰、視頻文件,動輒幾G字節(jié)大小,如果使用這種方法,很容易使內(nèi)存“爆倉”,理想的方法應該是讀一部分,寫一部分,不管文件有多大,只要時間允許,總會處理完成,這里就需要用到流的概念,文件復制操作使用文件流的讀/寫機制進行會防止“爆倉”現(xiàn)象的出現(xiàn),流程如圖2所示。
1657273043301_62.png
在圖2中可以看到,文件A中數(shù)據(jù)以流動的形式通過數(shù)據(jù)流管道,然后進入到文件B中,采用“讀一部分,寫一部分”的方式。流的好處是接收方可以提前處理,縮短等待時間,提高速度。例如,在網(wǎng)絡上觀看視頻,并不是整個視頻下載好了才播放的,而是下一點播一點。

在Node.js中,文件流的操作由Stream模塊提供,Stream是一個抽象接口,Node.js中還有很多對象實現(xiàn)了這個接口。例如,對HTTP服務器發(fā)起請求的request對象就是一個Stream,還有stdout(標準輸出)等。

Node.js中,Stream有4種流類型:

(1)Readable:可讀操作(可讀流)。

(2)Writable:可寫操作(可寫流)。

(3)Duplex:可讀可寫操作(雙向流、雙工流)。

(4)Transform:操作被寫入數(shù)據(jù),然后讀出結果(變換流)。

在Node.js 中,很多模塊涉及流的讀/寫,例如,HTTP requests and responses、Standard input/output、File reads and writes。Node.js中的I/O是異步的,因此對磁盤和網(wǎng)絡的讀/寫需要通過回調(diào)函數(shù)來讀取數(shù)據(jù),而回調(diào)函數(shù)需要通過事件來觸發(fā),所有的Stream對象都是EventEmitter(事件觸發(fā)器)的實例。常用的事件如表3所示。
1657273685430_63.png





猜你喜歡:

字節(jié)流與字符流之間如何實現(xiàn)轉(zhuǎn)換?

怎樣執(zhí)行for循環(huán)語句?for循環(huán)語句執(zhí)行流程

Node.js模塊化重寫計算器案例

黑馬程序員前端與移動開發(fā)培訓

分享到:
在線咨詢 我要報名
和我們在線交談!