如何在Node.js中使用流?

83 阅读4分钟

如何在Node.js中使用数据流

流是一种对象,它允许开发者以连续的方式在一个源中读/写数据。Node.js中主要有四种类型的流;可读、可写、双工和转换。每个流都是一个eventEmitter 实例,在几个间隔内发出不同的事件。

本文将通过使用流来读取和写入数据。

前提条件

要跟上这篇文章,你需要安装Node.js,并具备Javascript的基本知识。

让我们开始吧!

不同的流是做什么的?

  1. 可读流是一个用于读取操作的流。
  2. 可写流,顾名思义,是用于写操作的流。
  3. 双工流是一个同时执行读和写操作的流。
  4. 一个转换流是一个使用它的输入来计算输出的流。

流抛出几个事件,因为它们是eventEmitter 实例。这些事件被用来跟踪和监控流。

一些最常用的事件是。

  1. 数据 - 数据事件是在可读数据可用时发出的。
  2. Finish - Finish事件是在流写完数据后发出的。
  3. Error - 错误事件在读/写数据时发生错误时发出。
  4. 结束 - 当读流完成读取数据时,发出结束事件。

有了这些信息,让我们来看看我们如何使用流来从/向文件读写数据。

从流中读取数据

处理流是非常简单的,我们要做的就是创建流并处理流所发出的事件。

让我们看看我们是如何做到这一点的。

首先创建一个文件夹,名称由你选择。然后在该文件夹中创建一个名为 "input.txt "的文本文件。

在该文件中添加以下文字。

Section partners with university computer science programs across the globe to create a community-generated pool of content which is useful for engineers of every (any) level.

现在创建一个名为 "index.js "的JavaScript文件。

将以下代码添加到该文件中。

const fileSystem = require("fs");
var data = "";

const readStream = fileSystem.createReadStream("input.txt");

readStream.setEncoding("UTF8");

readStream.on("data", (chunk) => {
	data += chunk;
});

readStream.on("end", () => {
	console.log(data);
});

readStream.on("error", (error) => {
	console.log(error.stack);
});

在上面的片段中,第一步是我们导入文件系统包,这是Node.js中的一个内置包。然后我们初始化一个空字符串变量data 。接下来的语句通过createReadStream 方法创建一个读取流。

然后我们将编码设置为UTF-8。接下来的内容是处理必要的事件。我们使用data事件来向我们的数据变量添加数据。End事件用于将读取的数据输出到控制台。Error事件将记录任何错误,当它们发生时。

通过编写来运行代码。

node index

在终端上。

该程序应该输出我们写在input.txt文件上的数据。

写入一个流

现在我们已经看到了如何从流中读取数据,让我们来看看如何向流中写入数据。这个过程与读的过程类似。唯一的区别是,这次我们应该创建一个写流。

用下面的代码替换索引文件上的代码。

const fileSystem = require("fs");
var data = "Sample text";

const writeStream = fileSystem.createWriteStream("output.txt");

writeStream.write(data, "UTF8");

writeStream.end()

writeStream.on("finish", () => {
	console.log("Finished writing");
});

writeStream.on("error", (error) => {
	console.log(error.stack);
});

在上面的代码中,我们开始通过createWriteStream 方法创建一个写流。然后我们使用write 方法将数据写到我们的输出文件。

接下来,我们调用end函数来标记文件的结束。之后的内容是完成和错误事件的实现。

再次运行该应用程序。你会注意到,output.txt 文件被创建,我们的数据被写入其中。

这就是使用流进行读写的全部内容。现在让我们来看看如何对流进行管道处理。

管道流

管道是一种机制,涉及使用另一个流的输出输入另一个流。我们如何实现这一点呢?

用下面的代码替换index.js文件中的代码。

const fileSystem = require("fs");

const readStream = fileSystem.createReadStream("input.txt");
const writeStream = fileSystem.createWriteStream("output.txt");

readStream.pipe(writeStream);

console.log("Program finished");

这个程序非常简单。我们所要做的就是初始化读和写流,然后使用读流的管道方法将其输送到写流中。

运行该程序。现在这两个文件应该有类似的内容。

总结

在这篇文章中,我们经历了如何使用流来读写文件中的数据。我们看到了如何处理由流发出的事件。

我们还学习了如何连接读写流(管道)。我希望这能为你提供在你的Node.js应用程序中开始使用流所需的信息。