MST
星途 面试题库

面试题:Node.js中Stream四种类型简述

请简要阐述Node.js Stream的四种类型(Readable、Writable、Duplex、Transform)各自的特点,并举例说明在实际应用场景中,哪种类型适用于文件读取操作,哪种适用于文件写入操作。
49.3万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

Readable(可读流)

  • 特点:用于从数据源读取数据。有两种模式:流动模式和暂停模式。在流动模式下,数据会自动从底层系统读取,并通过事件尽快提供给应用程序;在暂停模式下,必须显式调用 read() 方法来读取数据。它会触发 dataend 等事件。
  • 示例场景:适用于文件读取操作。例如使用 fs.createReadStream 读取文件,它返回一个可读流,数据会以小块的形式被读取出来,方便处理大文件而不会占用过多内存。

Writable(可写流)

  • 特点:用于向目的地写入数据。可以通过 write() 方法写入数据,并通过 end() 方法结束写入。它会触发 drainfinish 等事件,当缓冲区被排空时会触发 drain 事件,当所有数据都已被处理并写入底层系统时会触发 finish 事件。
  • 示例场景:适用于文件写入操作。比如使用 fs.createWriteStream 写入文件,数据可以通过 write 方法分块写入文件。

Duplex(双工流)

  • 特点:同时是可读流和可写流,既可以从数据源读取数据,也可以向目的地写入数据。它继承了 ReadableWritable 流的功能,支持双向数据流动。
  • 示例场景:在网络通信中,如TCP套接字,既可以接收数据(可读),也可以发送数据(可写)。

Transform(转换流)

  • 特点:是一种特殊的双工流,在写入和读取数据时会对数据进行转换处理。例如压缩、加密等操作。数据写入时会经过转换后再输出,常用于数据格式的转换或数据的预处理等场景。
  • 示例场景:在文件压缩场景中,读取文件内容作为输入,经过压缩算法转换后再写入压缩文件,zlib.createGzip 就是一个转换流,它将输入的数据压缩后输出。

文件读取操作适用 Readable 类型,文件写入操作适用 Writable 类型。