为了账号安全,请及时绑定邮箱和手机立即绑定

无涯教程:Node.js - Streams介绍

标签:
Node.js

Stream流是使您可以连续地从源读取数据或将数据写入目标的对象,在Node.js中,有四种类型的流-

  • Readable   -  用于读取操作的流。

  • Writable    -  用于写操作的流。

  • Duplex       -  可用于读取和写入操作的流。

  • Transform  - 一种双工流,其中基于输入来计算输出。

每种类型的流都是一个 EventEmitter 实例,例如,一些常用事件是-

  • data   - 当有可读取的数据时,将触发此事件。

  • end     - 当没有更多数据可读取时,将触发此事件。

  • error   -  接收或写入数据时发生任何错误。

  • finish   - 当所有数据都已刷新到系统时,将触发此事件。

本教程提供了对流上常用操作的基本了解。

读取流

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

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

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

var fs=require("fs");var data='';//Create a readable streamvar 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 EndedTutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

写入流

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

var fs=require("fs");var data='Simply Easy Learning';//Create a writable streamvar 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 EndedWrite completed.

现在打开在当前目录中创建的output.txt;它应包含以下内容-

Simply Easy Learning

管道流

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

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

var fs=require("fs");//Create a readable streamvar readerStream=fs.createReadStream('input.txt');//Create a writable streamvar 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;它应包含以下内容-

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

链接流

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

使用以下代码创建一个名为main.js的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.


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
8
获赞与收藏
17

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消