【学习笔记】简单理解Node.js的Stream(数据流)

1.什么是Stream?

     stream即为数据流,在nodejs中,读取文件或将数据存入文件我们就需要用到Stream(数据流)。Stream在node.js中封装为是一个模块,专门用来处理文件的输入输出功能。

注:stream也是EventEmitter的实例,可用于绑定事件和事件监听者,以下为Stream常用的事件:

  • data - 当有数据可读时触发。

  • end - 没有更多的数据可读时触发。

  • error - 在接收和写入过程中发生错误时触发。

  • finish - 所有数据已被写入到底层系统时触发。

例:

//可读流处理data事件
readerStream.on('data', function(chunk) {          
   data += chunk;
});

2.创建Stream

   以创建可读流为例:

var fs = require("fs");
var data = '';

// 创建可读流
var readerStream = fs.createReadStream('input.txt');

// 设置编码为 utf8。
readerStream.setEncoding('UTF8');

// 处理流事件 --> 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("程序执行完毕");


 我们不直接用Stream模块创建数据流,因为fs内部已经引用Stream模块,并做了封装。

3.为什么用Stream?

一个简单的例子,某用户需要在线观看电影,假定我们使用http请求返回给用户电影内容,电影需要全部加载完后才可以播放,其次电影文件一次整个放入电脑内存中(电脑内存可能吃不消)。如果使用Stream模块,电影可以一点一点传输给客户端(利用http协议的chunk模式,边产生数据边发送数据)。

本文只是简单的介绍Stream,使用的代码来自菜鸟教程http://www.runoob.com/nodejs/nodejs-stream.html  

记录自己的学习过程,让自己更好理解stream,感谢知乎谦行老师的文章https://zhuanlan.zhihu.com/p/24432941  让我学习更多。


猜你喜欢

转载自blog.csdn.net/tao_gis/article/details/79850566