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();
});
posted @ 2021-02-01 23:28  howareyou!  阅读(273)  评论(0)    收藏  举报