1. 程式人生 > >node.js第四天//Node.js Stream(流)

node.js第四天//Node.js Stream(流)

讀資料

var rs = fs.createReadStream(filePath , {options}); options是一組key-value值,常用的設定如下:

flags: 對檔案進行何種操作,預設為’r’,讀檔案

encoding:指定編碼,預設為null,如果不設定具體的編碼格式,讀出的資料就是Buffer型別;也可以使用rs.setEncoding(“utf-8”)指定編碼格式

start:從start開始讀取檔案

end:讀取檔案到end為止(包括end)

highWaterMark:最高水位線,內部緩衝區最多能容納的位元組數,如果超過這個大小,就停止讀取資原始檔,預設值是64KB

需要觸發的函式 data:有資料需要讀取時觸發 error:發生錯我時觸發 end:讀取完畢時觸發 讀取例項:

var fs = require('fs');//引入fs模板
var read = fs.createReadStream('t.text');//建立可讀流
var data = ''
read.setEncoding('UTF8')//設定成utf-8編碼
read.on('data', function(text) {//有資料可以讀時觸發
    data += text;
})
read.on("error", function(err) {//發生錯誤時觸發
    console.log(err.stack);
})
read.on('end', function() {//讀取資料結束時觸發
    console.log(data);
})

寫入資料(覆蓋式)

觸發的函式 finish:寫入完成 error:發生錯誤 例項:

var fs = require('fs')
var write = fs.createWriteStream('t.text');
write.write('mm', 'UTF8');
write.on('finish', function() {
    console.log("寫入完成")
})
write.on('error', function(err) {
    console.log(err.stack);
})
write.end();

這種寫法是完全覆蓋檔案裡面原來的內容

管道流(從一個檔案讀資料到另一個檔案)

這種適用於複製內容很多的檔案 也是全文覆蓋

var fs = require('fs');
var read = fs.createReadStream('in.text');
var write = fs.createWriteStream('out.text');
//管道讀取
//讀取in.text中的內容寫入到out.text檔案中
read.pipe(write);

鏈式流

鏈式流一般用於管道操作,壓縮和解壓檔案

var fs = require('fs');
var zlib = require('zlib');
fs.createReadStream('in.text')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('input.txt.gz'));
console.log('檔案壓縮完成');
fs.createReadStream('input.txt.gz')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('input.txt'));
console.log("解壓完成");

寫入資料(追加式)

var ws = fs.createWriteStream(filePath, {options}); flags:對檔案進行何種操作,預設為“w",代表寫檔案;如果是"a",代表每次寫入的時候,不清空檔案中的原有資料,而是直接在原有資料的末尾新增新資料

encoding:指定寫入的編碼格式,預設為null

start:檔案開始寫入的位置

highWaterMark:快取區能夠容納的最大位元組數,預設為16KB,如果超過這個值,write方法就會返回false

var fs = require('fs');
var read = fs.createReadStream('in.text');
//設定第二個引數append
var write = fs.createWriteStream('out.text', { 'flags': 'a' });
//管道流讀寫操作
read.pipe(write);
console.log('執行完畢');