1

我需要定期使用大型未格式化的只读文本文件,并检查每个文件中是否存在某些内容/单词。该文件由所有字母数字字符组成。end但是,即使读取这些大型静态文件之一的流,我也遇到了问题。

下面是我在注意到它没有到达之后尝试运行的最简单代码的副本,end这仍然不会触发end事件。我可以看到许多data被读取的迭代/块,但绝不是文件的所有数据,end也从未被触发。

function readFile(file) {
    const readStream = fs.createReadStream(file, {
      fd: null,
      flags: 'r',
      encoding: 'utf-8',
      allowVolatile: true,
      highWaterMark: staticHighWaterMark,
    });

    readStream.on('data', (chunk) => {
      console.log('DATA chunk', chunk.length);
    });

    readStream.on('end', () => {
      console.log('END file');
    }); 
}

这太简单了,我开始怀疑这是否与我的环境有关,但是如果在上面的简单逻辑中识别为问题以读取流,请告诉我。

注意:如果我继续增加highWaterMark选项,它会进一步通过文件,但仍然没有到达end文件的。但是,这对到达或未到达文件末尾没有影响,而是控制每个“块”读取的数据量。

4

1 回答 1

0

您可以对此进行测试,看看是否可以读取整个文件?

function readFileV2(file) {
    const readStream = fs.createReadStream(file, {
      fd: null,
      flags: 'r',
      encoding: 'utf-8',
      allowVolatile: true,
      highWaterMark: staticHighWaterMark,
    });

    readStream.pipe(process.stdout);
}
于 2017-07-07T15:20:45.343 回答