node.js修改文件数据流?

时间:2017-08-19 19:18:11

标签: javascript node.js filestream fs

我需要将一个大型数据文件复制到另一个目的地并进行一些修改。 fs.readFilefs.writeFile非常慢。我需要逐行阅读,修改并写入新文件。我找到了类似的东西:

fs.stat(sourceFile, function(err, stat){
    var filesize = stat.size;

    var readStream = fs.createReadStream(sourceFile);

    // HERE I want do some modifications with bytes

    readStream.pipe(fs.createWriteStream(destFile));
})

但如何进行修改?我尝试使用data事件

获取数据
readStream.on('data', function(buffer){
    var str = strToBytes(buffer);
    str.replace('hello', '');
    // How to write ???
});

但不了解如何将其写入档案:

1 个答案:

答案 0 :(得分:2)

您应该使用transform流并使用这样的管道:

fs.createReadStream('input/file.txt')
     .pipe(new YourTransformStream())
     .pipe(fs.createWriteStream('output/file.txt'))

然后它只是implementing the transform stream as in this doc

的问题

您也可以使用scramjet这样更轻松地使用此功能:

fs.createReadStream('input/file.txt')
     .pipe(new StringStream('utf-8'))
     .split('\n')                                          // split every line
     .map(async (line) => await makeYourChangesTo(line))   // update the lines
     .join('\n')                                           // join again
     .pipe(fs.createWriteStream('output/file.txt'))

我认为这比手动操作更容易。