Node.js Streams

2024 年 8 月 29 日 | 阅读 3 分钟

流是允许您从源读取数据并将数据写入目标的对象的。Node.js 中有四种类型的流:

  • Readable (可读流): 此流用于读取操作。
  • Writable (可写流): 此流用于写入操作。
  • Duplex (双工流): 此流可用于读取和写入操作。
  • Transform (转换流): 这是一种双工流,其输出根据输入进行计算。

每种类型的流都是 Event emitter 的实例,并在不同时间抛出多个事件。以下是一些常用的事件:

  • Data (数据):当有可读数据时,将触发此事件。
  • End (结束):当没有更多可读数据时,将触发此事件。
  • Error (错误):在接收或写入数据时发生任何错误时,将触发此事件。
  • Finish (完成):当所有数据都已刷新到底层系统时,将触发此事件。

Node.js 从流读取

创建一个名为 input.txt 的文本文件,其中包含以下内容:

创建一个名为 main.js 的 JavaScript 文件,其中包含以下代码:

文件:main.js

现在,打开 Node.js 命令提示符并运行 main.js。

输出

Node.js streams 1

Node.js 写入流

创建一个名为 main.js 的 JavaScript 文件,其中包含以下代码:

文件:main.js

现在打开 Node.js 命令提示符并运行 main.js。

您将看到以下结果:

Node.js streams 2

现在,您可以看到一个名为 "output.txt" 的文本文件已被创建,该文件位于您保存 "input.txt" 和 "main.js" 文件的目录中。在我的情况下,它位于桌面。

打开 "output.txt" 文件,您将看到以下内容:

Node.js streams 3

Node.js 流管道

管道是一种机制,其中一个流的输出被用作另一个流的输入。管道操作没有限制。

让我们以一个从一个文件读取并将其写入另一个文件的管道示例为例。

文件:main.js

打开 Node.js 并运行 mian.js。

Node.js streams 4

现在,您可以看到一个名为 "output.txt" 的文本文件已被创建,该文件位于您保存 "main.js" 文件的目录中。在我的情况下,它位于桌面。

打开 "output.txt" 文件,您将看到以下内容:

Node.js streams 5

Node.js 流链

流链是一种通过将一个流的输出连接到另一个流来创建多个流操作链的机制。它通常与管道操作一起使用。

让我们以一个管道和链式操作的示例,来压缩一个文件然后解压缩该文件。

文件:main.js

打开 Node.js 命令提示符并运行 main.js。

您将获得以下结果:

Node.js streams 6

现在您将看到文件 "input.txt" 已被压缩,并在当前目录中创建了一个名为 "input.txt.gz" 的新文件。

要解压缩同一个文件:将以下代码放入 "main.js" 文件中。

文件:main.js

打开 Node.js 命令提示符并运行 main.js。

Node.js streams 7