node.js第四天//Node.js Stream(流)
阿新 • • 發佈:2018-12-11
讀資料
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('執行完畢');