nodeJS基礎 Stream用法

Stream是nodeJS的一個核心模塊,在nodeJS中應用很是普遍,好比HTTP 服務器request和response對象都是流node

  • 流的特色 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事件後,開始發射數據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('抽乾')
})
複製代碼
相關文章
相關標籤/搜索