nodejs中很对对象实现了这个stream抽象接口,所有的stream对象都是eventemitter实列。
nodejs stream四种类型
- Readable 可读操作
- Writeable 可写操作
- Duplex 可读可写操作
- Transform 操作被写入数据 然后读出结果。
可读
/**
*
* 1.创建可读对象
* 2.设置编码格式
* 3.监听 data 事件
* 4.监听 end 事件
* 5.监听错误对象
*
*/
var fs = require('fs');
var data = '';
var readerStream = fs.createReadStream('./data.txt');
readerStream.setEncoding('UTF8');
readerStream.on('data', function (chunk) {
data += chunk;
});
readerStream.on('end', function () {
console.log(data);
})
readerStream.on('error', function (err) {
console.error(err);
})
console.log('end');
可写
var fs = require('fs');
var data = 'bbbbbbbbbbbbbbb';
/**
*
* 1.创建可写对象
* 2.调用写入方法
* 3.标记写入结束
* 4.监听写入结束
* 5.错误监听
*
*/
var writeStream = fs.createWriteStream('data.txt');
writeStream.write(data, 'UTF8');
writeStream.end();
writeStream.on('finish', function () {
console.log('write end');
})
writeStream.on('error', function (err) {
console.error(err);
})
管道操作--链式流
/**
*
* 管道读写 实现大数据文件复制/传输
*
* 1.创建一个可读流和一个可写流
* 2.可读流调用pipe函数实现文件复制
*
*/
var fs = require('fs');
var readerStream = fs.createReadStream('input.txt');
var writeStream = fs.createWriteStream('output.txt');
readerStream.pipe(writeStream);
console.log('end');