如何在Node.js中使用数据流
流是一种对象,它允许开发者以连续的方式在一个源中读/写数据。Node.js中主要有四种类型的流;可读、可写、双工和转换。每个流都是一个eventEmitter 实例,在几个间隔内发出不同的事件。
本文将通过使用流来读取和写入数据。
前提条件
要跟上这篇文章,你需要安装Node.js,并具备Javascript的基本知识。
让我们开始吧!
不同的流是做什么的?
- 可读流是一个用于读取操作的流。
- 可写流,顾名思义,是用于写操作的流。
- 双工流是一个同时执行读和写操作的流。
- 一个转换流是一个使用它的输入来计算输出的流。
流抛出几个事件,因为它们是eventEmitter 实例。这些事件被用来跟踪和监控流。
一些最常用的事件是。
- 数据 - 数据事件是在可读数据可用时发出的。
- Finish - Finish事件是在流写完数据后发出的。
- Error - 错误事件在读/写数据时发生错误时发出。
- 结束 - 当读流完成读取数据时,发出结束事件。
有了这些信息,让我们来看看我们如何使用流来从/向文件读写数据。
从流中读取数据
处理流是非常简单的,我们要做的就是创建流并处理流所发出的事件。
让我们看看我们是如何做到这一点的。
首先创建一个文件夹,名称由你选择。然后在该文件夹中创建一个名为 "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应用程序中开始使用流所需的信息。