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 让我学习更多。