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="https://www.cnblogs.com/chenyingying0/p/這是我要寫入檔案的內容"; //創建可讀流 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="https://www.cnblogs.com/chenyingying0/p/這是我要寫入檔案的內容"; //創建可讀流 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("解壓結束");


轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/143529.html
標籤:JavaScript
上一篇:今天,公司架構師跟我分享多年的私貨 | 進階之路必讀書籍(附下載鏈接)
下一篇:Node.js模塊系統
