Stream是nodeJS的一個核心模組,在nodeJS中應用非常廣泛,比如HTTP 伺服器request和response物件都是流
- 流的特點 1.有序的 2.有方向的
- 流分分為兩種 1.可讀流 2.可寫流
- 流不關心檔案的整體內容,只關注是否從檔案中讀到了資料,以及讀到資料之後的處理
可讀流的用法
let fs = require('fs');
let path = require('path');
let rs = fs.createReadStream(path.join(__dirname, '1.txt'), {
flags: 'r', // 檔案的操作是讀取操作
encoding: 'utf8', // 預設是null null代表的是buffer
autoClose: true, // 讀取完畢後自動關閉
highWaterMark: 3, // 預設是64k 64*1024b
start: 0,
end:3
});
複製程式碼
預設情況下不會將檔案中的內容輸出
內部會先建立一個Buffer先讀取3b(三位元組)
如果你不進行操作,預設是非流動模式,暫停狀態
當監聽data事件後,開始發射資料
rs.on('data', function (data) {
console.log(data);
//讀取
});
複製程式碼
暫停方法 暫停data事件觸發
rs.pause();
複製程式碼
恢復方法 恢復data事件觸發
rs.resume();
複製程式碼
除了data事件,可讀流還能監聽其他一些事件
end事件(暫停)
該事件會在讀完資料後被觸發
rs.on('end', function () {
console.log('讀取完成');
});
複製程式碼
error事件
如果有錯誤會會觸發
rs.on('error', function (err) {
console.log(err);
});
複製程式碼
open事件
開啟檔案
rs.on('open', function () {
console.log('檔案開啟');
});
複製程式碼
close事件
關閉檔案
rs.on('close', function () {
console.log('檔案關閉');
});
複製程式碼
設定編碼
rs.setEncoding('utf8');
複製程式碼
可寫流的用法
let fs = require('fs');
let ws = fs.createWriteStream('./4.txt', {
flages: 'w', //讀寫識別符號
mode: 0o666, // 許可權
autoClose: true, // 是否自動關閉
highWaterMark: 3, // 預設是16k
encoding: 'utf8', // 編碼格式
start: 0 //從哪開始
});
複製程式碼
相對於可讀流,可寫流的方法就少多了
write方法
寫入後會返回一個布林值,來判斷系統快取區是否滿了
let flag = ws.write('寫入的內容','utf8',function(){});
console.log(flag);
複製程式碼
end方法
關閉方法,再關閉前可以最後傳入一次資料
ws.write('最後寫入的內容','utf8',function(){});
複製程式碼
drain方法
抽乾方法 當寫入完後,會觸發
必須快取區滿了被清空後才會出發drain事件
ws.on('drain', function () {
console.log('抽乾')
})
複製程式碼