Node.js流

什么是流?

流是可以从一个源读取或写入数据到连续的目标对象。在Node.js,有四种类型的数据流。

  • Readable - 其是用于读操作。

  • Writable - 用在写操作。

  • Duplex - 其可以用于读取和写入操作。

  • Transform - 输出基于输入的地方进行计算的一种双相流。

每种类型的流是一个EventEmitter实例,并抛出的时代不同的实例几个事件。例如,一些常用的事件是:

  • data - 当有数据可读取此事件。

  • end - 当没有更多的数据读取此事件被触发。

  • error - 当有任何错误或接收数据写入此事件。

  • finish - 当所有数据已刷新到底层系统触发此事件

本教程将让您了解关于数据流的常用操作。

从流中读取

创建一个名为input.txt的文本文件有以下内容

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

创建一个js文件名为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");

现在运行main.js看到的结果:

$ node main.js

验证输出

Program Ended
Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

写入流

创建一个js文件名为main.js的文件,里面有如下代码:

var fs = require("fs");
var data = 'Simply Easy Learning';

// 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");

现在运行main.js看到的结果:

$ node main.js

验证输出

Program Ended
Write completed.

现在打开在当前目录中创建output.txt文件,验证output.txt文件中有以下内容。

Simply Easy Learning

管道流

管道是我们提供一个流的输出作为输入到另一个流的机制。它通常被用于从一个流中获取数据,并通过该流输出到另一个流。没有对管道的操作没有限制。现在,我们将展示一个管道从一个文件中读取和写入到另一个文件的例子。

创建一个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");

现在运行main.js看到的结果:

$ node main.js

验证输出

Program Ended

在当前目录打开所创建的output.txt文件,并验证output.txt文件中有以下内容。

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

链式流

链式是一个机制,一个流的输出连接到另一个流,并创建一个链多流操作。它通常用于管道的操作。现在,我们将使用管道和链接先压缩文件,然后解压缩。

创建一个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.");

现在运行main.js看到结果:

$ node main.js

验证输出

File Compressed.

你会发现,input.txt文件已经被压缩,并在当前目录下创建的文件input.txt.gz。现在,让我们尝试使用下面的代码进行解压缩同一个文件。

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.");

现在运行main.js看到结果:

$ node main.js

验证输出

File Decompressed.

查看电脑完整版 »

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值