📅  最后修改于: 2020-12-24 03:42:43             🧑  作者: Mango
流是可以帮助您从源读取数据并将数据写入目标的对象。 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
输出:
使用以下代码创建一个名为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”,您将看到以下内容。
管道是一种机制,其中一个流的输出用作另一流的输入。管道操作没有限制。
让我们以一个管道示例为例,该示例从一个文件读取并将其写入另一个文件。
文件: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”,您将看到以下内容。
链接流是一种通过将一个流的输出连接到另一个流来创建多个流操作链的机制。通常用于管道操作。
让我们以管道和链接为例来压缩文件,然后解压缩同一文件。
文件: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