【发布时间】:2016-11-17 14:46:53
【问题描述】:
我遇到了关于 fs.createReadStream 和 fs.createWriteStream 的意外行为。我希望有人能指出我在哪里做出了错误的假设:
我像这样创建一个可读写的流
let readableStream = fs.createReadStream('./lorem ipsum.doc');
let writableStream = fs.createWriteStream('./output');
为什么,如果我像这样将读取流发送到写入流
let data, chunk;
readableStream
.on('readable', () => {
while ((chunk=stream.read()) !== null) {
data+=chunk;
}
})
.on('end', ()=>{
writableStream.write(data)
console.log("done");
});
我最终在输出文件中发现了一个差异:
如果我像这样流式传输:
let data, chunk;
readableStream
.on('readable', () => {
while ((chunk=stream.read()) !== null) {
writableStream.write(chunk)
}
})
.on('end', ()=>{
console.log("done");
});
一切都很好,正如预期的那样:
即,在第一个示例中,何时/何处添加了额外的字节开销?为什么要添加它?出了什么问题?
谢谢你的启发!
注意:我知道使用pipe(它给了我正确的输出文件),但这些例子只是为了我的理解。
【问题讨论】: