流是用于在 Node.js 中处理流数据的抽象接口。 stream 模块提供了用于实现流接口的 API。

Node.js 提供了许多流对象。 例如,对 HTTP 服务器的请求和 process.stdout 都是流的实例。 流可以是可读的、可写的、或两者兼而有之。 所有的流都是 EventEmitter 的实例。

类型

从程序角度而言流是有方向的数据,以程序为第一视角,按照流动方向可以分为三种流

  1. 设备流向程序:readable
  2. 程序流向设备:writable
  3. 双向流动:duplex、transform

NodeJS 关于流的操作被封装到了 Stream 模块,这个模块也被多个核心模块所引用。按照 Unix 的哲学:一切皆文件

  1. 普通文件(txt、jpg、mp4)
  2. 设备文件(stdin、stdout)
  3. 网络文件(http、net)