如何在Node.js中进行JavaScript对象的管道/流处理

如何在Node.js中进行JavaScript对象的管道/流处理

本文简要介绍了在Node.js中实现管道/流处理的方法,以及缓冲区、流的工作原理以及在Node.js中如何实现管道。

缓冲区: 它们是用于在数据从一个地方传输到另一个地方时的临时存储空间,缓冲区被填充了数据然后传递出去。缓冲区以小块数据的方式传输。缓冲区非常有用,因为我们不必等待完全的传输过程,我们填满了缓冲区,这是数据的临时存储空间,然后可以一起传递。

流: 它们是用于数据传输的数据处理方法。通过在数据完全传输之前对数据进行处理,可以提高性能。它们将小块缓冲区收集在一起,当缓冲区填满后,将数据传递到流中进行处理并发送给客户端。它们是数据处理的方法,用于按照正确的顺序读取或写入输入到输出。缓冲区和流一起播放在线视频时,不需要等待完整的视频处理,而是通过缓冲区和流逐位逐位地传输小节。

可读流: 可读流用于从任何来源提取信息,它们被用于读取存在于任何来源上的数据,然后我们可以使用该数据传输到任何来源或存储到我们的系统中。可读流以 chunks (来自缓冲区的)的形式发出事件,这是需要处理的数据的一小部分。

示例: 在当前项目目录中创建一个名为 read.txt 的文件,其中包含一些示例文本,本例中我们有以下文本。

THIS IS READ.TXT FILE

文件名: index.js

// Requiring file system module
const fs = require('fs');
 
// Creating a read stream
const myReadStream = fs.createReadStream('read.txt', 'utf8');
 
myReadStream.on('data', function (chunk) {
    console.log("new chunk received");
 
    // Printing the chunk
    console.log(chunk);
});

输出:

new chunk received 
THIS IS READ.TXT FILE

可写流: 可写流允许您将数据发送到任何目标源,可以是任何文件或在线流源。这些流还会定期发出事件以确保正常运作。

示例: 创建一个名为 index.js 的文件,并使用以下代码。

文件名:index.js

// Requiring file system module
const fs = require('fs');
 
// Creating a write stream
// It will create a txt file in provided location
const myWriteStream =
    fs.createWriteStream(__dirname + '/write.txt');
 
// Writing on stream
myWriteStream.write("Greetings from GeeksforGeeks");

输出: 在当前目录中会生成一个名为 write.txt 的新文件,其中包含以下数据。

Greetings from GeeksforGeeks

使用pipeline()进行管道传输:

管道传输是一种直接从一个流传输数据到另一个流的方法,通过使用缓冲区来实现,这样一旦填满缓冲区,数据传输过程就可以开始。换句话说,管道传输用于在多个步骤中处理流式数据。这是一个模块方法,用于在流之间进行管道传输,向前传递错误并在管道完成时清理并提供回调函数。

示例: 在当前项目目录中创建一个read.txt文件,并填写一些示例文本,例如下面的文本。

THIS IS READ.TXT FILE

文件名:index.js

const fs = require('fs');
const zlib = require('zlib');
const { pipeline } = require('stream');
 
// Constructing promisify
const { promisify } = require('util');
const pipelineAsync = promisify(pipeline);
 
// Creating a read stream
const myReadStream = fs.createReadStream(
    __dirname + '/read.txt', 'utf8');
 
// Creating a write stream
const myWriteStream = fs.createWriteStream(
    __dirname + '/write.txt');
 
// Creating transform stream
const transform = zlib.createGzip();
 
(async function run() {
    try {
 
        // Pipelining three streams
        await pipelineAsync(
 
            // Reading from read stream
            myReadStream,
 
            // Transforming the file
            transform,
 
            // Writing on write stream
            myWriteStream
        );
        console.log("Pipeline accomplished");
    }
    catch (err) {
        console.error('pipeline failed with error:', err);
    }
})();

输出: 我们将看到以下输出,并且在当前目录中将生成write.txt文件。

Pipeline accomplished

注意: 管道应该使用管道而不是管道,因为管道是不安全的,但下面给出了管道的实现方式:

文件名:index.js

// Requiring file system module
const fs = require('fs');
 
// Creating a read stream
const myReadStream = fs.createReadStream(
    __dirname + '/read.txt', 'utf8');
 
// Creating a write stream
const myWriteStream = fs.createWriteStream(
    __dirname + '/write.txt');
 
// Piping using pipe
myReadStream.pipe(myWriteStream);
console.log("Piping accomplished");

输出: 我们将看到以下输出,并且当前目录中将生成write.txt文件。

Piping accomplished

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程