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
选项