stream
stream中的流是指一种抽象的数据结构,是一种将很大的数据分割成一小段一小段来传输的方式。
stream不需要引入,也可以说他不是个模块,因为他的方法都已经被其他可能用到流处理的模块暴露了。
用流来读取数据
var fs=require('fs');
var flowF=fs.createReadStream('aaa.js','utf-8');
var i=0;
flowF.on('data',function(chunk){
console.log(chunk);
i++;
});
flowF.on('end',function(){
console.log('整个文件读取完了:一共读取了'+i+'次');
});
flowF.on('error',function(err){
console.log('读取文件出现了错误'+err);
});
首先我通过不断的复制粘贴将aaa.js文件变成了两万多行var c=b;的大文件
然后通过上面代码输出最终除了输出无数个var c=b;之外还输出了:
整个文件读取完了:一共读取了4次,由此可见这个文档流是分四次读取完的。
然后我们看看aaa.js的大小是223KB,差不多一次读取个60KB左右,内存开销就少了非常多了,要是读取再大一点的文件内存开销差距就更大了
用流来存储数据
var fs=require('fs');
var flowWriteF=fs.createWriteStream('ccc.js');
for(var i=0;i<100000;i++){
flowWriteF.write('写入数据'+i+'\n');
}
flowWriteF.end(function(){
var theFS=fs.stat('ccc.js',function(err,stat){
if(err){
console.log(err);
}else{
console.log(stat.size);
}
});
});
最终输出了1788890也就是170来k的样子。
使用管道来转储数据
var fs=require('fs');
var rs=fs.createReadStream('ccc.js');
var ws=fs.createWriteStream('aaa.js');
rs.pipe(ws);
这样就将ccc.js的所有内容给予了aaa.js,