1. stream简介:
流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。 node中部分方法或类,通过实现stream中提供的类,来进行流数据的处理。
如:fs.createReadStream , fs.createWriteStream , HTTP 请求 和 process.stdout等都是stream的示例
2. stream的特点
- 流是单向的
- 流都是EventEmitter的示例,都可以使用发布订阅模式进行事件交互
3. 流的类型
- Readable:只能进行读取操作(如 fs.createReadStream())
- Writable:只能进行写入操作(如 fs.createWriteStream())
- Duplex:可进行读取&写入操作(如 net.Socket)
- Transform:在读写过程中可以修改和变换数据的 Duplex 流(如 zlib.createDeflate())
4. 可读流
4.1 自定义可读流
let {Readable} = require('stream');
// 通过继承Readable类,且重写_read()方法,来创建自定义的可读流
// 实例的push方法,push的内容相当于,data事件监测到的内容。当push(null)相当于关闭此可读流的通道,在push(null)后,再调用push方法则报错
class MyRead extends Readable{
_read(){}
}
let mr = new MyRead;
mr.on('data',function(data){
console.log(data);
});
mr.push('124')
复制代码
4.2 可读流状态
可读流有3种状态
4.2 以fs.createReadStream(path,options)为例,讲解可读流事件
4.2.1 创建可读流
let rs = new ReadStream(path.join(__dirname,'1.txt'),{
flags:'r', // 文件的操作是读取操作
encoding:'utf8', // 默认是null null代表的是buffer
autoClose:true, // 读取完毕后是否自动关闭
highWaterMark:3,// 缓存区默认大小 默认是64k 64*1024b
start:0, // 文件读取开始位置
end:3 // 文件读取结束位置
});
复制代码