Stream是nodeJS的一個核心模塊,在nodeJS中應用很是普遍,好比HTTP 服務器request和response對象都是流node
可讀流的用法緩存
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事件後,開始發射數據bash
rs.on('data', function (data) {
console.log(data);
//讀取
});
複製代碼
暫停方法 暫停data事件觸發服務器
rs.pause();
複製代碼
恢復方法 恢復data事件觸發ui
rs.resume();
複製代碼
除了data事件,可讀流還能監聽其餘一些事件編碼
end事件(暫停)
該事件會在讀完數據後被觸發spa
rs.on('end', function () {
console.log('讀取完成');
});
複製代碼
error事件
若是有錯誤會會觸發code
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('抽乾')
})
複製代碼