Nodejs系列-6-Steam模块

流(stream)是 Node.js 中处理流式数据的抽象接口。 stream 模块用于构建实现了流接口的对象。

Node.js 提供了多种流对象。 例如,HTTP 服务器的请求和 process.stdout 都是流的实例。

流可以是可读的、可写的、或者可读可写的。 所有的流都是 EventEmitter 的实例。

使用时,需要require引入;

流的基本类型

  • Writable - 可写入数据的流(例如 fs.createWriteStream())
  • Readable - 可读取数据的流(例如 fs.createReadStream())
  • Duplex - 可读又可写的流(例如 net.Socket)
  • Transform - 在读写过程中可以修改或转换数据的 Duplex 流(例如 zlib.createDeflate())

stream.Writable 类

常用方法

- writable.write(chunk[, encoding][, callback])
- writable.end([chunk][, encoding][, callback])
- writable.setDefaultEncoding(encoding)

常用事件

- 'close' 事件
- 'drain' 事件
- 'error' 事件
- 'finish' 事件
- 'pipe' 事件
- 'unpipe' 事件

stream.Readable 类

常用方法

- readable.setEncoding(encoding)
- readable.read([size])
- readable..pipe(destination[, options])
- readable.pause()
- readable.resume()

常用事件

- 'close' 事件
- 'data' 事件
- 'end' 事件
- 'error' 事件
- 'readable' 事件

结束语

Node.js 中许多的对象都是提供了流的实现:fs文件操作、net、dgram、http、https等,这些模块在数据传输中会产生可消费的流对象,可写流,可读流或可读可写流,此时我们按自己的需求对数据流进行对应的操作即可。

stream 模块主要用于开发者创建新类型的流实例。 对于以消费流对象为主的开发者,极少需要直接使用 stream 模块。