Node.js Stream(流)--文件操做

Node.js中的Stream 有四種流類型:node

  • Readable - 可讀操做。學習

  • Writable - 可寫操做。ui

  • Duplex - 可讀可寫操做.編碼

  • Transform - 操做被寫入數據,而後讀出結果。spa

 

全部的 Stream 對象都是 EventEmitter 的實例。經常使用的事件有:code

  • data - 當有數據可讀時觸發。orm

  • end - 沒有更多的數據可讀時觸發。對象

  • error - 在接收和寫入過程當中發生錯誤時觸發。blog

  • 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("解壓結束");

 

 

相關文章
相關標籤/搜索