gpt4 book ai didi

javascript - 如何判断 readStream 是否没有更多行可读?

转载 作者:行者123 更新时间:2023-11-30 17:08:51 26 4
gpt4 key购买 nike

我正在使用以下代码逐行读取一个大文件(大于内存):

var fs = require('fs');
var readline = require('readline');
var stream = require ('stream');

function begin(){

var instream = fs.createReadStream(fileLocation);
var outstream = new stream;
outstream.readable = true;
outstream.writable = true;

var rl = readline.createInterface({
input: instream,
output: outstream,
terminal: false
});

var ctr = 0;
rl.on('line', function(line) { //line reading function
//work done here.
});
}

我做了一些处理,然后需要写一个文件到磁盘(JSON)。但是我不想在每一行都被处理之前写这个对象。行读取函数中的所有代码都是同步的。

我怎么知道什么时候可以安全地写入我的文件?

最佳答案

这里有点棘手。 r1 中存储的对象是 readline.createInterface 调用的结果:这意味着它是一个 Interface,而不是 readStream。由于 Interface 用于交互(与某些代理),您作为 written in the docs ,应该改为监听 close 事件:

Event: close

Emitted when close() is called.

Also emitted when the input stream receives its end event. The Interface instance should be considered "finished" once this is emitted. For example, when the input stream receives ^D, respectively known as EOT.

所以它应该如下所示:

rl.on('line', function(line) { 
// process emitted line
}).on('close', function() {
// all the lines read, go on
});

您是否一直在使用 readStream 实例,您应该一直在监听 end 事件。当相应的流(由 fs.createReadStream 创建)发出它自己的 end 事件时,它由 readStream 实例发出。问题是 Interface 对象不会发出 end 事件 - 因为在这种情况下通信结束意味着完全关闭 channel 。

关于javascript - 如何判断 readStream 是否没有更多行可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27401795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com