面试题答案
一键面试Readable(可读流)
- 特点:用于从数据源读取数据。有两种模式:流动模式和暂停模式。在流动模式下,数据会自动从底层系统读取,并通过事件尽快提供给应用程序;在暂停模式下,必须显式调用
read()
方法来读取数据。它会触发data
、end
等事件。 - 示例场景:适用于文件读取操作。例如使用
fs.createReadStream
读取文件,它返回一个可读流,数据会以小块的形式被读取出来,方便处理大文件而不会占用过多内存。
Writable(可写流)
- 特点:用于向目的地写入数据。可以通过
write()
方法写入数据,并通过end()
方法结束写入。它会触发drain
、finish
等事件,当缓冲区被排空时会触发drain
事件,当所有数据都已被处理并写入底层系统时会触发finish
事件。 - 示例场景:适用于文件写入操作。比如使用
fs.createWriteStream
写入文件,数据可以通过write
方法分块写入文件。
Duplex(双工流)
- 特点:同时是可读流和可写流,既可以从数据源读取数据,也可以向目的地写入数据。它继承了
Readable
和Writable
流的功能,支持双向数据流动。 - 示例场景:在网络通信中,如TCP套接字,既可以接收数据(可读),也可以发送数据(可写)。
Transform(转换流)
- 特点:是一种特殊的双工流,在写入和读取数据时会对数据进行转换处理。例如压缩、加密等操作。数据写入时会经过转换后再输出,常用于数据格式的转换或数据的预处理等场景。
- 示例场景:在文件压缩场景中,读取文件内容作为输入,经过压缩算法转换后再写入压缩文件,
zlib.createGzip
就是一个转换流,它将输入的数据压缩后输出。
文件读取操作适用 Readable
类型,文件写入操作适用 Writable
类型。