流
流的基本类型
Node.js,Stream 有四种流类型:
所有的 Stream 对象都是 EventEmitter 的实例。
常用的事件有:
样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| const fs = require("fs"); let data = '';
const readerStream = fs.createReadStream('input.txt');
readerStream.setEncoding('UTF8');
readerStream.on('data',(chunk) => { data += chunk; });
const writerStream = fs.createWriteStream('output.txt');
writerStream.write(data,'UTF8');
writerStream.end();
writerStream.on('finish', function() { console.log("写入完成。"); });
writerStream.on('error', function(err){ console.log(err.stack); });
readerStream.on('end',() => { console.log(data); });
readerStream.on('error',(err) => { console.log(err.stack); });
console.log("程序执行完毕");
|
以上程序还有一种更加简便的写法:
使用管道流
1 2 3 4 5 6 7 8 9 10 11 12 13
| const fs = require("fs");
const readerStream = fs.createReadStream('input.txt');
const writerStream = fs.createWriteStream('output.txt');
readerStream.pipe(writerStream);
console.log("程序执行完毕");
|
如果要同时将流要输出到多个地方,可以使用
链式流
链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。
1 2 3 4 5 6 7 8 9 10
| const fs = require("fs"); const zlib = require('zlib');
fs.createReadStream('input.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz')); console.log("文件压缩完成。");
|