【发布时间】:2019-05-15 13:15:03
【问题描述】:
我读到createRreadStream 不会将整个文件放入内存,而是使用块。但是,我有一种情况,我同时在文件中写入和读取;写入首先完成,然后我从磁盘中删除文件。不知何故,readstream 能够完成读取整个文件而没有任何错误。
有人对此有任何解释吗?我认为流不会将文件加载到内存中是错误的吗?
这是写入文件的代码
const fs = require('fs');
const file = fs.createWriteStream('./bigFile4.txt');
function write(stream,data) {
if(!stream.write(data))
return new Promise(resolve=>stream.once('drain',resolve));
return true;
}
(async() => {
for(let i=0; i<1e6; i++) {
const res = write(file,'a')
if(res instanceof Promise)
await res;
}
write(file,'success');
})();
为了阅读,我使用了这个,
const file = fs.createReadStream('bigFile4.txt')
file.on('data',(chunk)=>{
console.log(chunk.toString())
})
file.on('end',()=>{
console.log('done')
})
【问题讨论】:
-
您能否发布您的代码,以便我们尝试看看那里发生了什么?
-
什么版本的节点?
-
你应该在节点流中阅读
backpressuring -
@smac89,我使用的是节点版本 8.11.3 另外,我阅读了有关背压的信息,但无法弄清楚这里有什么帮助。我已经更新了问题(添加了代码),也许你可以看看。
-
@Mirakurun 完成
标签: javascript node.js stream fs