nodejs中的stream(流)

302 阅读1分钟

1. stream简介:

流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。 node中部分方法或类,通过实现stream中提供的类,来进行流数据的处理。

如:fs.createReadStream , fs.createWriteStream , HTTP 请求 和 process.stdout等都是stream的示例

2. stream的特点

  1. 流是单向的
  2. 流都是EventEmitter的示例,都可以使用发布订阅模式进行事件交互

3. 流的类型

  1. Readable:只能进行读取操作(如 fs.createReadStream())
  2. Writable:只能进行写入操作(如 fs.createWriteStream())
  3. Duplex:可进行读取&写入操作(如 net.Socket)
  4. 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 // 文件读取结束位置     
    });

4.2.2