Node.js 使用NodeJS流式传输大型静态文件

Node.js 使用NodeJS流式传输大型静态文件,node.js,stream,large-files,node-streams,nodejs-stream,Node.js,Stream,Large Files,Node Streams,Nodejs Stream,我需要定期使用大型无格式只读文本文件,并检查每个文件中是否存在某些内容/单词。此文件由所有字母数字字符组成。但是,对于这些大型静态文件之一,我甚至在读取流的结尾时都会遇到问题 下面是一个最简单的代码的副本,我注意到它没有到达结束,并且这仍然不会触发结束事件。我可以看到许多迭代/块的数据被读取,但从未触发文件的所有数据和end function readFile(file) { const readStream = fs.createReadStream(file, { fd:

我需要定期使用大型无格式只读文本文件,并检查每个文件中是否存在某些内容/单词。此文件由所有字母数字字符组成。但是,对于这些大型静态文件之一,我甚至在读取流的
结尾时都会遇到问题

下面是一个最简单的代码的副本,我注意到它没有到达
结束
,并且这仍然不会触发
结束
事件。我可以看到许多迭代/块的
数据被读取,但从未触发文件的所有数据和
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
选项,它会使它在文件中更进一步,但仍然不会到达文件的
结尾。但是,这不应该对到达或不到达文件末尾产生影响,而是控制每个“块”读取的数据量。

您可以测试一下,看看是否能够读取整个文件吗

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

    readStream.pipe(process.stdout);
}

你能测试一下,看看你能不能用它来读取整个文件吗

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

    readStream.pipe(process.stdout);
}

出于好奇。你想逐行阅读它吗?不一定要这样,但我想可能是这样,这是目前nodejsapi所支持的。你认为这会对文件的
结尾产生影响吗?我建议你改用
readline
)。我对你的问题很好奇。我将发布一个代码供您测试,好吗?您确定您的环境在一定数量的行之后没有切断输出吗?我知道intellij IDEA在输出一定数量的行之后不会显示输出。要测试这一点,您可以通过管道将流传输到可写(文件)流,并查看是否所有内容都已写入。我看没有理由不这样做。另外,只要看看,出于好奇,没有
allowVolatile
选项。你想逐行阅读它吗?不一定要这样,但我想可能是这样,这是目前nodejsapi所支持的。你认为这会对文件的
结尾产生影响吗?我建议你改用
readline
)。我对你的问题很好奇。我将发布一个代码供您测试,好吗?您确定您的环境在一定数量的行之后没有切断输出吗?我知道intellij IDEA在输出一定数量的行之后不会显示输出。要测试这一点,您可以通过管道将流传输到可写(文件)流,并查看是否所有内容都已写入。我看没有理由不这样做。另外,只要看看,就没有
allowVolatile
选项