pipe管道的实现原理
let fs = require('fs');
//1.创建读写流
let rs = fs.createReadStream("/Users/yangxianqiang/Downloads/美女.mp4");
let ws = fs.createWriteStream(__dirname+'/source/美女888.mp4');
rs.on('data',(data)=>{
let flag = ws.write(data);
//判断是否继续读取,flag值为false,说明还没有来得及做写操作
//当一个流不处在drain的状态,怼write()的调用会缓存数据块,并返回false
if (!flag){
//暂停读取操作
rs.pause();
}
console.log(flag);
});
//一旦当前所有的缓存的数据块都排空了(被操作系统接收进行输出),那么'drain'事件就会被触发
ws.on('drain',()=>{
//继续读取流
rs.resume();
});
rs.on('end',()=>{
ws.end();
});