node之stream
stream 流
流是一個抽象名詞。
你可以將一片代碼當成一條河,每個詞都是一滴水。除非你用特殊手段打破常規,否則就會隨波逐流。就像CSS中有浮動,有定位,那麼默認展示的就是流。
讀取文本內容:
源碼:
var fs = require('fs');
var rs = fs.createReadStream('1.txt', 'utf-8');
rs.on('data', function (chunk) { console.log('DATA:') console.log(chunk); });
rs.on('end', function () { console.log('END'); });
rs.on('error', function (err) { console.log('ERROR: ' + err); });
第一個參數爲事件:
data讀取的數據(打印出來爲文件的內容)
end結束
error錯誤
第二個參數爲回調
寫入文本內容:
源碼:
var ws1 = fs.createWriteStream('output1.txt', 'utf-8');
ws1.write('使用Stream寫入文本數據...\n');
...
ws1.write('END.');
ws1.end();
var ws2 = fs.createWriteStream('output2.txt');
ws2.write(new Buffer('使用Stream寫入二進制數據...\n', 'utf-8'));
...
ws2.write(new Buffer('END.', 'utf-8'));
ws2.end();
pipe()方法
將兩個流拼接起來,可以想象成數組中有個方法叫concat。
一般複製文件這麼寫,將rs的內容寫入到ws裏
var rs = fs.createReadStream('sample.txt');
var ws = fs.createWriteStream('copied.txt');
rs.pipe(ws);
當讀完數據,end事件觸發,將自動關閉ws流
可設置不自動關閉 rs .pipe(ws , { end: false });
下圖爲實戰用到的代碼:
想了解更多去官網node