中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中stream如何使用

發布時間:2021-07-21 10:37:13 來源:億速云 閱讀:182 作者:Leah 欄目:web開發

Node.js中stream如何使用,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

使用流的好處

舉一個讀取文件的例子:

使用fs.readFileSync同步讀取一個文件,程序會被阻塞,所有的數據都會被讀取到內存中.

換用fs.readFile讀取文件,程序不會被阻塞,但是所有的數據依舊會被一次性全部被讀取到內存中.

當處理大文件壓縮,歸檔,媒體文件和巨大的日志文件的時候,內存使用就成了問題,在這種情況下,流的優勢就體現出來了.

流被設計為異步的方式.相比將剩余的文件數據一次性讀進內存,還是值得讀取一個緩沖區,期望的操作將會被執行,而且結果會被寫到輸出流.

Node.js中stream如何使用

流的分類

  • stream.Readable---用于在I/O上獲取數據

  • stream.Writable---用于在輸出的目標寫入數據

  • stream.Duplex---一個可讀可寫的流,例如網絡連接

  • stream.Transform---一個會以某種方式修改數據的雙工流

創建一個可讀流

方法一

var Stream = require('stream')
var readable = Stream.Readable();
var source = ['a', 'b', 'c'];
readable._read = function() {
 this.push(source.shift() || null);
}
readable.pipe(process.stdin);

方法二

var Readable = require('stream').Readable;

function MyStream(options) {
 Readable.call(this, options);
}

MyStream.prototype = Object.create(Readable.prototype, {
 constructor: { value: MyStream }
});

MyStream.prototype._read = function() {
 this.push("hello");
 this.push(null);
}

var streams = new MyStream();

streams.pipe(process.stdin);

方法三

var stream = require('stream');
var util = require('util');

function MyStream(options) {
 stream.Readable.call(this, options);
}

MyStream.prototype._read = function(size) {
 this.push('hello');
 this.push(null);
}

util.inherits(MyStream, stream.Readable);

var streams = new MyStream();

streams.pipe(process.stdout);

可讀流的一些概念

可讀流是 對提供數據的源頭的抽象

可讀流的實例

  • http responses,on the client

  • http requests, on the server

  • fs read stream

  • zlib streams

  • crypto streams

  • TCP sockets

  • child process stdout and stderr

  • process.stdin

可讀流的模式

可讀流有兩種工作模式:flowing和paused.

在flowing模式下,可讀流自動從系統底層讀取數據,并通過EventEmitter接口的事件盡快將數據提供給應用.

可讀流在創建的時候都是處在paused模式.

可讀流可以在兩種模式下切換.

處于paused模式可讀流,可以通過下面三種途徑切換到flowing模式:

  • 監聽'data'事件.

  • 調用stream.resume()方法.

  • 調用stream.pipe()方法將數據發送到Writable

處于flowing模式可讀流,可以通過下面兩種途徑切換到paused模式:

  • 如果不存在管道目標,可以通過調用stream.pause()方法實現

  • 如果存在管道目標,可以通過取消'data'事件監聽,并調用stream.unpipe()方法移除所有管道來實現

可讀流事件

可讀流提供了以下事件:

  • 'close'事件,事件將在流或底層資源關閉后觸發,但不是所有的流都會觸發該事件.

  • 'data'事件,data事件將會在流將數據傳遞給消費者時觸發.當流轉換到flowing模式時會觸發該事件.

  • 'end'事件,end事件只有在數據被完全消費后才會觸發.

  • 'error'事件,error事件會在底層系統內部出錯從而不能產生數據,或當流的實現試圖傳遞錯誤數據時發生.

  • 'readble'事件,readable事件將在流中有數據可供讀取時觸發.

關于Node.js中stream如何使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安多县| 新晃| 丁青县| 垫江县| 马尔康县| 宜城市| 招远市| 北川| 惠州市| 庄河市| 中宁县| 绥中县| 武穴市| 玛沁县| 濮阳县| 当雄县| 印江| 宝鸡市| 托里县| 隆化县| 宿州市| 石门县| 剑川县| 湄潭县| 大邑县| 长泰县| 大田县| 迁西县| 礼泉县| 衡山县| 安泽县| 兴仁县| 建宁县| 会东县| 穆棱市| 格尔木市| 蒙自县| 东丰县| 五华县| 东城区| 杨浦区|