在Node中读取文件并处理相同的文件

时间:2014-01-20 17:39:49

标签: node.js readline

我想读取文件并处理文件的每一行。我使用readStream读取文件,然后调用processRecord方法。 processMethod需要进行多次调用,并且需要在将最终数据写入存储之前进行。

该文件有500K记录。

我面临的问题是,文件以极快的速度读取,我相信节点没有获得足够的优先级来实际处理processLine方法。因此,内存最高可达800MB然后慢下来。

感谢任何帮助。

我使用的代码如下 -

var instream = fs.createReadStream('C:/data.txt');
var outstream = new stream;

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

rl.on('line', function(line) {

 processRecord(line);   
    }

1 个答案:

答案 0 :(得分:0)

Node.js readline模块更多地用于用户交互,而不是逐行从文件流式传输。对于流行的byline软件包,您可能会有更好的运气。

var fs = require('fs');
var byline = require('byline');

// You'll need to check the encoding.
var lineStream = byline(fs.createReadStream('C:/data.txt', { encoding: 'utf8' }));

lineStream.on('data', function (line) {
    processRecord(line);
});

如果数据通过管道传输到另一个流,您将有更好的机会避免内存泄漏。我在这里假设processRecord正在融入其中。如果你使它a transform stream object,那么你可以使用管道。

var out = fs.createWriteStream('output.txt');

lineStream.pipe(processRecordStream).pipe(out);