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("解压结束");

 

 

相关文章
相关标签/搜索