Node.js Stream(流)

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。

Stream 有四种流类型:

  • Readable - 可读操作。
  • Writable - 可写操作。
  • Duplex - 可读可写操作.
  • Transform - 操作被写入数据,然后读出结果。

所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

  • data - 当有数据可读时触发。
  • end - 没有更多的数据可读时触发。
  • error - 在接收和写入过程中发生错误时触发。
  • finish - 所有数据已被写入到底层系统时触发。

读取

var fs = require("fs");
var data = "";
var readStream = fs.createReadStream('lpl.txt');
readStream.setEncoding('UTF8');
readStream.on('data',function(chunk){
    data+=chunk;
})
readStream.on('end',function(){
    console.log(data);
})

readStream.on('error',function(err){
    console.log(err.stack);
})

console.log("程序执行完毕");

写入

var fs = require("fs");
var data = "人面不知何处去,桃花依旧笑春风。出自唐代崔护的《题都城南庄》去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。";
var writeStream = fs.createWriteStream('lpl.txt');
writeStream.write(data,'UTF8');
writeStream.end();
writeStream.on('finish',function(){
    console.log("写入完成");
})
writeStream.on('error',function(err){
    console.log(err.stack);
})
console.log("程序执行完毕");

管道流:
管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

var fs = require("fs");
var readStream = fs.createReadStream('lpl.txt');
var writeStream = fs.createWriteStream('input.txt');
readStream.pipe(writeStream);
console.log("执行完成");

链式流:
链式是通过连接输出流到另外一个流并创建多个对个流操作链的机制。链式流一般用于管道操作。
接下来我们就是用管道和链式来压缩和解压文件。

压缩:

var fs = require("fs");
var zlib = require('zlib');

// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('lpl.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('lpl.txt.gz'));
console.log("文件压缩完成。");

解压:

var fs = require("fs");
var zlib = require('zlib');

// 解压 input.txt.gz 文件为 input.txt
fs.createReadStream('lpl.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('lpl1.txt'));
  
console.log("文件解压完成。");
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的reques...
    Hathaway_桉阅读 254评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • stream 流是一个抽象接口,在 Node 里被不同的对象实现。例如 request to an HTTP se...
    明明三省阅读 3,424评论 1 10
  • 01、Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的req...
    夜幕小草阅读 195评论 0 1
  • Node.js Stream(流) Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对h...
    FTOLsXD阅读 616评论 0 2