Node.js 面试题
目录

请解释 Node.js 的 Readable Stream 和 Writable Stream 的用法。如何创建和使用它们?

· 约 5 分钟读完 · 第 15 / 377 章

推荐答案

Readable Stream 的用法

Readable Stream 用于从数据源读取数据。可以通过 fs.createReadStream 或 http.IncomingMessage 等方式创建。Readable Stream 有两种模式:流动模式(flowing mode)和暂停模式(paused mode)。

  • 流动模式:数据会自动从底层系统读取,并通过 data 事件传递给应用程序。
  • 暂停模式:必须显式调用 stream.read() 方法来读取数据。

Writable Stream 的用法

Writable Stream 用于将数据写入目标。可以通过 fs.createWriteStream 或 http.ServerResponse 等方式创建。Writable Stream 提供了 write() 和 end() 方法来写入数据。

创建和使用 Readable 和 Writable Stream

可以通过继承 stream.Readable 或 stream.Writable 类来创建自定义的流。

本题详细解读

Readable Stream 的详细解释

Readable Stream 是 Node.js 中用于读取数据的抽象接口。它可以从文件、网络请求、内存等数据源中读取数据。Readable Stream 有两种模式:

  1. 流动模式:数据会自动从底层系统读取,并通过 data 事件传递给应用程序。应用程序不需要显式调用 read() 方法。
  2. 暂停模式:应用程序必须显式调用 read() 方法来读取数据。可以通过 stream.resume() 或 stream.pause() 来切换模式。

Writable Stream 的详细解释

Writable Stream 是 Node.js 中用于写入数据的抽象接口。它可以将数据写入文件、网络响应、内存等目标。Writable Stream 提供了 write() 和 end() 方法来写入数据。

  • write():用于写入数据块。
  • end():用于结束写入操作,并可选地写入最后一个数据块。

自定义流的创建

通过继承 stream.Readable 或 stream.Writable 类,可以创建自定义的流。自定义流需要实现 _read() 或 _write() 方法,分别用于读取和写入数据。

流的管道操作

Node.js 提供了 pipe() 方法,用于将 Readable Stream 和 Writable Stream 连接起来,实现数据的自动传输。pipe() 方法会自动处理背压(backpressure),确保数据不会堆积在内存中。

通过 pipe() 方法,可以轻松地将多个流连接起来,形成数据处理管道。