📜  Node.js流

📅  最后修改于: 2020-12-24 03:42:43             🧑  作者: Mango

Node.js流

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

  • 可读:此流用于读取操作。
  • 可写:此流用于写操作。
  • 双工:此流可用于读取和写入操作。
  • 转换:这是双工流的类型,其中根据输入计算输出。

每种类型的流都是事件发射器实例,并在不同的时间引发多个事件。以下是一些常用事件:

  • 数据:当有可读取的数据时,将触发此事件。
  • 结束:当没有更多数据可读取时,将触发此事件。
  • 错误:如果在接收或写入数据时发生任何错误,则会触发此事件。
  • 完成:将所有数据刷新到基础系统后,将引发此事件。

Node.js从流读取

创建一个名为input.txt的文本文件,其内容如下:

Javatpoint is a one of the best online tutorial website to learn different technologies in a very easy and efficient manner. 

使用以下代码创建一个名为main.js的JavaScript文件:

文件:main.js

var fs = require("fs");
var data = '';
// Create a readable stream
var readerStream = fs.createReadStream('input.txt');
// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');
// Handle stream events --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});
readerStream.on('end',function(){
   console.log(data);
});
readerStream.on('error', function(err){
   console.log(err.stack);
});
console.log("Program Ended");

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

node main.js

输出:

Node.js写入流

使用以下代码创建一个名为main.js的JavaScript文件:

文件:main.js

var fs = require("fs");
var data = 'A Solution of all Technology';
// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');
// Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');
// Mark the end of file
writerStream.end();
// Handle stream events --> finish, and error
writerStream.on('finish', function() {
    console.log("Write completed.");
});
writerStream.on('error', function(err){
   console.log(err.stack);
});
console.log("Program Ended");

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

node main.js

您将看到以下结果:

现在,您可以看到在保存“ input.txt”和“ main.js”文件的位置创建了一个名为“ output.txt”的文本文件。就我而言,它在桌面上。

打开“ output.txt”,您将看到以下内容。

Node.js管道流

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

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

文件:main.js

var fs = require("fs");
// Create a readable stream
var readerStream = fs.createReadStream('input.txt');
// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');
// Pipe the read and write operations
// read input.txt and write data to output.txt
readerStream.pipe(writerStream);
console.log("Program Ended"); 

打开Node.js并运行mian.js

node main.js

现在,您可以看到在保存“ main.js”的位置创建了一个名为“ output.txt”的文本文件。文件。就我而言,它在桌面上。

打开“ output.txt”,您将看到以下内容。

Node.js链流

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

让我们以管道和链接为例来压缩文件,然后解压缩同一文件。

文件:main.js

var fs = require("fs");
var zlib = require('zlib');
// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream('input.txt.gz'));
  console.log("File Compressed.");

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

node main.js

您将得到以下结果:

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

解压缩同一文件:将以下代码放入js文件“ main.js”

文件:main.js

var fs = require("fs");
var zlib = require('zlib');
// Decompress the file input.txt.gz to input.txt
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('input.txt'));
  console.log("File Decompressed.");

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

node main.js