【问题标题】:How do I load lines from a file at an interval in NodeJS without loading the whole file into memory?如何在 NodeJS 中每隔一段时间从文件中加载行而不将整个文件加载到内存中?
【发布时间】:2016-01-09 09:10:59
【问题描述】:
我在 Node 方面不是很有经验,但我想一次加载一个文件并处理它,但有两个特殊限制:
- 我不想将整个文件加载到内存中(它可能很大)
- 我想处理每行大约相隔一秒钟。理想情况下,在 100 毫秒到 2000 毫秒之间的随机间隔
或者另一种看待问题的方式:我想将文件视为数据的测试流。
到目前为止,我发现的所有内容似乎都涉及一次将整个内容加载到一个数组中,或者逐行加载它,但几乎是立即完成的。
【问题讨论】:
标签:
node.js
file-io
setinterval
【解决方案1】:
嗯,刚找到这个。不知道是否有更好的方法可以做到这一点,但使用line-by-line 似乎非常简单:
var Random = require('random-js')();
var LineByLineReader = require('line-by-line'), lr = new LineByLineReader(filename);
lr.on('line', function (line) {
lr.pause(); // this blocks so the next line won't read right away.
sendToStream(line);
setTimeout(function () {
lr.resume(); // resume after random interval
}, Random.integer(100, 2000));
});