pipe

2020 M12 31

通过管道可控制流速,当没有写入空间时暂停读取,在有空间时继续读取并完成写入,读取完毕后关闭可写流。


const fs = require('fs')
function pipe(readFile,writeFileu){
    let rs = fs.createReadStream(readFile,{
        highWaterMark:5
    })
    let ws = fs.createWriteStream(writeFileu,{
        highWaterMark:1
    })
    rs.on('data',function(chunk){
        // 当ws.write() 返回false时
        //表示没有空间继续写入了,暂停读取
        if(ws.write(chunk) == false){
            rs.pause() // 暂停rs的data事件
        }
    })
    // 当触发可写流的drain,表示有空间继续写入了,
    //继续读取文件
    ws.on('drain',function(){
        rs.resume() 
    // 恢复rs的data事件    
   // 把当前读入的内容都写到文件中了,继续调用读写
    })
    // 当读取流触发end方法,表示读取完毕
    //这时关闭可写流的写入
    rs.on('end',function(){
        ws.end()
    })
}
pipe('1.txt','./2.txt')