Nodejs教程
Nodejs Mysql
Nodejs MongoDB
Nodejs 对比

Node.js Stream

Node.js Stream

流是可以帮助您从源读取数据并将数据写入目标的对象。 Node.js中有四种类型的流:
Readable: 该流用于读取操作。 Writable: 该流用于写操作。 Duplex: 此流可用于读取和写入操作。 Transform: 是双工流的类型,根据输入计算输出。
每种流都是事件发射器实例,并在不同的时间抛出多个事件。以下是一些常用事件:
Data: 有可用数据读取时触发此事件。 End: 当没有更多数据可读取时,将触发此事件。 Error: 如果在接收或写入数据时发生任何错误,就会触发此事件。 Finish: 当所有数据均已刷新到基础系统时,将触发此事件。

Node.js从流中读取

创建一个名为input.txt的文本文件,其内容如下:
lidihuo 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流1

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
您将看到以下结果:
Node.js stream 2
现在,您可以看到在保存" input.txt"和" main.js"文件的位置创建了一个名为" output.txt"的文本文件。就我而言,它在桌面上。
打开" output.txt",您将看到以下内容。
Node.js流3

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
Node.js流4
现在,您可以看到在其中创建了一个名为" output.txt"的文本文件您保存了?main.js?文件。就我而言,它在桌面上。
打开" output.txt",您将看到以下内容。
Node.js流5

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
您将得到以下结果:
Node.js stream 6
现在您将看到该文件" 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
Node.js流7
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4