在我看来,我在nodejs 中遇到了并发问题。我知道这是不可能的。
我正在按行处理文件中的数据并将其写入另一个文件中。在输出文件中,我注意到行被覆盖,这意味着我时不时地看到输出中的行似乎被其他行覆盖了一半。 我从读取流中读取数据。它看起来大致是这样的:
let iStream = fs.createReadStream(inputFile);
let oStream = fs.createWriteStream(outputFile);
let remaining = '';
iStream.on('data',(data)=>{
remaining += data;
let line = remaining.split(/\r?\n/);
let lines = line.length;
if(lines > 0) {
remaining = line[lines - 1];
line.length = lines - 1;
line.forEach((curr)=>{
oStream.write(processLine(curr));
});
});
此方案是否有可能产生写入失败,或者我是否必须寻找其他地方?
最佳答案
这似乎是缓冲区溢出问题。您可能会溢出写入缓冲区,但没有注意流量控制。
您可以将回调传递给 .write()
并仅在调用该回调时继续进行下一次写入,或者您可以关注 .write() 的返回值
,当它返回 false
时,您必须等待流上的 drain
事件,然后再写入更多内容。
另一种方法是编写 transform stream然后使用 .pipe()
并让流基础设施为您管理流量控制。
关于javascript - Nodejs 文件流并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42266202/