node.js(三 stream 管道流 模块化 函数)
Posted mufengchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js(三 stream 管道流 模块化 函数)相关的知识,希望对你有一定的参考价值。
一、stream
stream是一个抽象的接口,node中有很多对象实现了这个接口。
stream有四种流类型: Readable: 可读操作; Writable: 可写操作; Duplex: 可读可写操作; Transform: 操作被写入数据,然后都出结果;
所有的stream对象独有EventsEmitter的实例,常用的事件有:
data: 当有数据可读时触发;
end: 没有更多的数据可读时触发;
error: 在接收和写入过程中发生错误时触发;
finish: 所有数据已被写入到底层系统时触发;
1、从流中读取数据
例如: var fs = require(‘fs‘);
var data = ‘‘;
var readerStream = fs.createReadStream(‘demo.txt‘); //创建可读的流
//开始执行读取的事件
readerStream.on(‘data‘, function(chunk){
data += chunk;
})
readerSteam.on(‘end‘, function(){
console.log(data)
})
readerStream.on(‘error‘, function(err){
console.log(err.stack)
})
2、写入流
例如:
var fs = require(‘fs‘);
var data = ‘要写入的内容‘;
var writerStream = fs.creamWriteStream(‘demo.txt‘); //写入demo.txt 文档内
writeStream.write(‘data‘, ‘UTF8‘); //使用utf-8格式写入数据;
writeStream.end(); //标记文件末尾;
writeStream.on(‘finish‘, function(){
console.log(‘写入完成‘);
})
writeStream.on(‘error‘, function(){
console.log(err.stack);
})
3、管道流
管道提供了一个从输出流到输入流的机制; 通常用于从一个流中回去数据,然后传递到另一个流中。
例如;
var fs = require(‘fs‘);
var readerStream = fs.creamReadStream(‘demo1.txt‘);
var writeSteam = fs.creamWriteStream(‘demo2.text‘);
readerStream.pip( writeStream);
4、链式流
链式是通过连接输出流到另一个流并创建多个流操作链的机制。链式流一般用于管道操作。
例如:
var fs = require(‘fs‘);
var zlib = require(‘fs‘);
var readerStream = fs.createReadStream(‘demo1.txt‘);
readerStream.pip(zlib.createGzip()) //将文件进行压缩demo.txt.gz
.pip(fs.createWriteStream(‘demo1.txt.gz‘))
fs.createReadStream(‘demo1.txt.gz‘).pip(zlib.createGunzio()) //将压缩文件进行解压
.pip(fs.createWriteStream(demo.txt))
以上是关于node.js(三 stream 管道流 模块化 函数)的主要内容,如果未能解决你的问题,请参考以下文章