pipe作用
|
|
- 该方法实现了一个可读流向一个可写流数据的写入
- 这种写入方法可以控制liul
实现原理
- 定义可读流与可写流,监听data事件当数据读入缓存后写数据
- 判断可写流是否超过写的限制。如果超过,暂停数据读入。并监听可写流drain事件判断数据是否写入。
- 数据写入后恢复数据读入,并循环第一步。
- 监听可读流end事件,当数据读入完毕,将缓存区的数据强制写入。
代码实现
1234567891011121314151617181920212223242526272829function pipe1 (source,target) {var fs=require('fs');var ws=fs.createWriteStream(target);var rs=fs.createReadStream(source);var flag=true;//监听data,开始读取数据rs.on('data',function (data) {//写入数据flag=ws.write(data,function (err) {console.log(err);});//如果无法写入,暂停读入if (!flag) {rs.pause();}})//监听drain事件,判断是否写入完毕ws.on('drain',function () {rs.resume();})//监听end,判断读入完毕,将数据强制写入rs.on('end',function (data) {ws.end(data);})//错误监听rs.on('error',function (err) {console.log(err);})}