Node.js中的Stream 有四種流類型: Readable - 可讀操作。 Writable - 可寫操作。 Duplex - 可讀可寫操作. Transform - 操作被寫入數據,然後讀出結果。 所有的 Stream 對象都是 EventEmitter 的實例。常用的事件有: data - ...
Node.js中的Stream 有四種流類型:
-
Readable - 可讀操作。
-
Writable - 可寫操作。
-
Duplex - 可讀可寫操作.
-
Transform - 操作被寫入數據,然後讀出結果。
所有的 Stream 對象都是 EventEmitter 的實例。常用的事件有:
-
data - 當有數據可讀時觸發。
-
end - 沒有更多的數據可讀時觸發。
-
error - 在接收和寫入過程中發生錯誤時觸發。
-
finish - 所有數據已被寫入到底層系統時觸發。
先創建一個test.txt
cyy在學習node.js
然後是main.js
var fs=require("fs"); var mydata=""; //創建可讀流 var stream=fs.createReadStream("test.txt"); //設置編碼 stream.setEncoding("utf8"); stream.on("data",function(data){ mydata+= data; }) stream.on("end",function(){ console.log(mydata); }) stream.on("error",function(err){ console.log(err.stack); }) console.log("讀取文件結束");
列印結果:
寫入流(寫入文件)
mian.js
var fs=require("fs"); var mydata="這是我要寫入文件的內容"; //創建可讀流 var stream=fs.createWriteStream("test.txt"); //設置編碼 stream.write(mydata,"utf8"); stream.end();//標記文件末尾 stream.on("finish",function(){ console.log("寫入結束"); }) stream.on("error",function(err){ console.log(err.stack); }) console.log("操作結束");
然後查看剛纔的test.txt
這是我要寫入文件的內容
管道流(文件內容複製)
管道提供了一個輸出流到輸入流的機制。通常我們用於從一個流中獲取數據並將數據傳遞到另外一個流中。
首先test.txt
這是在test.txt中的內容
然後test2.txt為空
main.js
var fs=require("fs"); var mydata="這是我要寫入文件的內容"; //創建可讀流 var stream=fs.createReadStream("test.txt"); //創建可寫流 var stream2=fs.createWriteStream("test2.txt"); stream.pipe(stream2); console.log("複製結束");
此時查看原本為空的test2.txt
這是在test.txt中的內容
鏈式流(可用於解壓縮文件)
鏈式是通過連接輸出流到另外一個流並創建多個流操作鏈的機制。鏈式流一般用於管道操作。
首先壓縮文件操作:
var fs=require("fs"); var zlib=require("zlib"); //壓縮 fs.createReadStream("test.txt") .pipe(zlib.createGzip()) .pipe(fs.createWriteStream("test.txt.gz")); console.log("壓縮結束");
然後是解壓操作:
var fs=require("fs"); var zlib=require("zlib"); //解壓 fs.createReadStream("test.txt.gz") .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream("test3.txt")); console.log("解壓結束");