问题描述
我的代码立即针对600kB文件... 700kB文件运行,在800kB时突然挂起,直到最后。
每次打印块写入缓冲区时,我都会打印出来。 (65536是2 ^ 16,大概是每个块的大小。)
var bufs = [];
var count = 0;
readStream.on('data',function(d){ bufs.push(d);
count += 65536;
console.log(count/1000 + "k" + "/ 800k");
});
readStream.on('end',function(){
var buf = Buffer.concat(bufs);
console.log(buf);
fs.writeFile("test.jpg",buf,()=>{console.log('hi')});
});
我明白了:
5:04:02 PM web.1 | 65.536k/ 800k
5:04:02 PM web.1 | 131.072k/ 800k
5:04:02 PM web.1 | 196.608k/ 800k
5:04:02 PM web.1 | 262.144k/ 800k
5:04:02 PM web.1 | 327.68k/ 800k
5:04:02 PM web.1 | 393.216k/ 800k
5:04:02 PM web.1 | 458.752k/ 800k
5:04:02 PM web.1 | 524.288k/ 800k
5:04:02 PM web.1 | 589.824k/ 800k
5:04:02 PM web.1 | 655.36k/ 800k
5:04:02 PM web.1 | 720.896k/ 800k
5:04:02 PM web.1 | 786.432k/ 800k
5:04:02 PM web.1 | 851.968k/ 800k
这意味着到达终点,但是readStream.on('end'...
没有触发。因此,实际的fs writeFile不会真正发生。
以前,我问了一个问题How to make fs writeFile faster for an image?,因为我认为它挂起是因为我做的效率低下。我直接从读取流中获得了一些很好的答案,而不必担心缓冲区(感谢@ jfriend00和@Randy Casburn):
readStream.pipe(fs.createWriteStream("test.jpg"));
readStream.on('end',() => {
console.log("all done Now");
});
但它仍然挂起,完全相同,大小约为800kB。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)