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

推荐答案

Readable Stream 的用法

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

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

------------------------- ------- -- -
  --------------------- --------------- ----- -- --------
---

------------------------ -- -- -
  --------------- ---- ---- -- --------
---

Writable Stream 的用法

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

创建和使用 Readable 和 Writable Stream

可以通过继承 stream.Readablestream.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.Readablestream.Writable 类,可以创建自定义的流。自定义流需要实现 _read()_write() 方法,分别用于读取和写入数据。

流的管道操作

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

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

纠错
反馈