node之stream
stream 流
流是一个抽象名词。
你可以将一片代码当成一条河,每个词都是一滴水。除非你用特殊手段打破常规,否则就会随波逐流。就像CSS中有浮动,有定位,那么默认展示的就是流。
读取文本内容:
源码:
var fs = require('fs');
var rs = fs.createReadStream('1.txt', 'utf-8');
rs.on('data', function (chunk) { console.log('DATA:') console.log(chunk); });
rs.on('end', function () { console.log('END'); });
rs.on('error', function (err) { console.log('ERROR: ' + err); });
第一个参数为事件:
data读取的数据(打印出来为文件的内容)
end结束
error错误
第二个参数为回调
写入文本内容:
源码:
var ws1 = fs.createWriteStream('output1.txt', 'utf-8');
ws1.write('使用Stream写入文本数据...\n');
...
ws1.write('END.');
ws1.end();
var ws2 = fs.createWriteStream('output2.txt');
ws2.write(new Buffer('使用Stream写入二进制数据...\n', 'utf-8'));
...
ws2.write(new Buffer('END.', 'utf-8'));
ws2.end();
pipe()方法
将两个流拼接起来,可以想象成数组中有个方法叫concat。
一般复制文件这么写,将rs的内容写入到ws里
var rs = fs.createReadStream('sample.txt');
var ws = fs.createWriteStream('copied.txt');
rs.pipe(ws);
当读完数据,end事件触发,将自动关闭ws流
可设置不自动关闭 rs .pipe(ws , { end: false });
下图为实战用到的代码:
想了解更多去官网node