//注意这里只调用了一次 uncork()
ws.uncork();
//只有调用同样次数的 uncork() 数据才会被输出。
ws.uncork();
});
六、可读流的 pipe() 方法
pipe() 方法类似下面的代码,在可读流与可写流之前架起一座桥梁。
const fs = require('fs');
//创建一个可读流
let rs = fs.createReadStream('./1.txt', {
highWaterMark: 3
});
//创建一个可写流
let ws = fs.createWriteStream('./2.txt', {
highWaterMark: 3
});
rs.on('data', function (data) {
let flag = ws.write(data);
console.log(`往可写流中写入 ${data.length} 字节数据`);
//如果写入缓冲区已满,则暂停可读流的读取
if (!flag) {
rs.pause();
console.log('暂停可读流');
}
});
//监控可读流数据是否读完
rs.on('end', function () {
console.log('数据已读完');
//如果可读流读完了,则调用 end() 表示可写流已写入完成
ws.end();
});
//如果可写流缓冲区已清空,可以再次写入,则重新打开可读流
ws.on('drain', function () {
rs.resume();
console.log('重新开启可读流');
});我们用 pipe() 方法完成上面的功能。
const fs = require('fs');
//创建一个可读流
let rs = fs.createReadStream('./1.txt', {
highWaterMark: 3
});
//创建一个可写流
let ws = fs.createWriteStream('./2.txt', {
highWaterMark: 3
});
let ws2 = fs.createWriteStream('./3.txt', {
highWaterMark: 3
});
//绑定可写流到可读流,自动将可读流切换到流动模式,将可读流的所有数据推送到可写流。
rs.pipe(ws);
//可以绑定多个可写流
rs.pipe(ws2);我们也可以用 unpipe() 手动的解绑可写流。
const fs = require('fs');
//创建一个可读流
let rs = fs.createReadStream('./1.txt', {
highWaterMark: 3
});
//创建一个可写流
let ws = fs.createWriteStream('./2.txt', {
highWaterMark: 3
});
let ws2 = fs.createWriteStream('./3.txt', {
highWaterMark: 3
});
rs.pipe(ws);
rs.pipe(ws2);
//解绑可写流,如果参数没写,则解绑所有管道
setTimeout(function () {
rs.unpipe(ws2);
}, 0);希望本文所述对大家node.js程序设计有所帮助。









