NodeJS學習系列課程筆記(NodeJs Stream 的相關使用方法)
阿新 • • 發佈:2018-12-31
流的操作,在很多語言中存在,比如Java中的Inputsteam , outputStream 等等,在nodejs中, Stream也 是一個抽象介面,Node 中有很多物件實現了這個介面。例如,對http 伺服器發起請求的request 物件就是一個 Stream,還有stdout(標準輸出)。
對於Stream流有一下四中型別:
- Readable - 可讀操作。
- Writable - 可寫操作。
- Duplex - 可讀可寫操作。
- Transform - 操作被寫入資料,然後讀出結果。
常用的時間型別操作有幾下幾種:
- data - 當有資料可讀時觸發。
- end - 沒有更多的資料可讀時觸發。
- error - 在接收和寫入過程中發生錯誤時觸發。
- finish - 所有資料已被寫入到底層系統時觸發。
/**
* Created by Richard on 7/14/16.
*/
var fs = require('fs');
var data = '';
var readerStream = fs.createReadStream('my.txt');
readerStream.setEncoding('UTF8');
readerStream.on('data', function(chunk) {
data +=chunk;
});
readerStream.on ('end', function() {
console.log(data);
});
readerStream.on('error', function(err) {
console.log(err);
});
console.log('完畢');
上面程式碼中主要用到幾個時間包括data on err.
下面我們在來嘗試一下建立一個寫入流:
/**
* Created by Richard on 7/14/16.
*/
const fs = require('fs');
var data = 'My name is Richad Jiang Bo';
var writerStream = fs.createWriteStream('output.txt' );
writerStream.write(data, 'UTF8');
writerStream.end();
writerStream.on('finish', () => {
"use strict";
console.log('寫入完成');
});
writerStream.on('error', err => {
"use strict";
console.log(err);
});
console.log('執行完畢');
在上面程式碼中我們應用到了finish事件。
接下來我們在嘗試建立一個管道流的示例:
/**
* Created by Richard on 7/14/16.
*/
const fs = require('fs');
const readerStream = fs.createReadStream('my.txt');
const writeStream = fs.createWriteStream('my2.txt');
readerStream.pipe(writeStream);
對於stream的應用,在nodejs中http模組,同樣被應用到, 會在後續部落格中更新。