node.js(三 stream 管道流 模塊化 函數)
一、stream
stream是一個抽象的接口,node中有很多對象實現了這個接口。
stream有四種流類型: Readable: 可讀操作; Writable: 可寫操作; Duplex: 可讀可寫操作; Transform: 操作被寫入數據,然後都出結果;
所有的stream對象獨有EventsEmitter的實例,常用的事件有:
data: 當有數據可讀時觸發;
end: 沒有更多的數據可讀時觸發;
error: 在接收和寫入過程中發生錯誤時觸發;
finish: 所有數據已被寫入到底層系統時觸發;
1、從流中讀取數據
例如: var fs = require(‘fs‘);
var data = ‘‘;
var readerStream = fs.createReadStream(‘demo.txt‘); //創建可讀的流
//開始執行讀取的事件
readerStream.on(‘data‘, function(chunk){
data += chunk;
})
readerSteam.on(‘end‘, function(){
console.log(data)
})
readerStream.on(‘error‘, function(err){
console.log(err.stack)
})
2、寫入流
例如:
var fs = require(‘fs‘);
var data = ‘要寫入的內容‘;
var writerStream = fs.creamWriteStream(‘demo.txt‘); //寫入demo.txt 文檔內
writeStream.write(‘data‘, ‘UTF8‘); //使用utf-8格式寫入數據;
writeStream.end(); //標記文件末尾;
writeStream.on(‘finish‘, function(){
console.log(‘寫入完成‘);
})
writeStream.on(‘error‘, function(){
console.log(err.stack);
})
3、管道流
管道提供了一個從輸出流到輸入流的機制; 通常用於從一個流中回去數據,然後傳遞到另一個流中。
例如;
var fs = require(‘fs‘);
var readerStream = fs.creamReadStream(‘demo1.txt‘);
var writeSteam = fs.creamWriteStream(‘demo2.text‘);
readerStream.pip( writeStream);
4、鏈式流
鏈式是通過連接輸出流到另一個流並創建多個流操作鏈的機制。鏈式流一般用於管道操作。
例如:
var fs = require(‘fs‘);
var zlib = require(‘fs‘);
var readerStream = fs.createReadStream(‘demo1.txt‘);
readerStream.pip(zlib.createGzip()) //將文件進行壓縮demo.txt.gz
.pip(fs.createWriteStream(‘demo1.txt.gz‘))
fs.createReadStream(‘demo1.txt.gz‘).pip(zlib.createGunzio()) //將壓縮文件進行解壓
.pip(fs.createWriteStream(demo.txt))
node.js(三 stream 管道流 模塊化 函數)