在node.js中读取和写入一个大的txt文件导致异常

时间:2015-08-07 05:38:57

标签: node.js multithreading io child-process

我有一个大约1GB的大型txt文件。我正在尝试从此文件中读取内容并写入另一个文件。我的代码是 - >

var fs = require("fs"); 
var fb = fs.openSync('./copy.txt','r+');
fs.open('./largefile.txt','r',function(error,fd){
    fs.fstat(fd,function(error,stats){
        var totalFileSize = stats.size,
            chunk = 512,
            buffer = new Buffer(512),
            bytesRead = 0;

        while(bytesRead < totalFileSize){
            if((totalFileSize - bytesRead) < chunk){
                chunk = totalFileSize - bytesRead ;
            }
            fs.read(fd,buffer,0,chunk,bytesRead,function(err, bytesRead, buffer){
                 fs.write(fb,buffer,0,chunk,bytesRead,function(err,written,buffer){});
            });
            bytesRead = bytesRead + chunk;  
        }   
    });
});

我有这个错误控制台 - &gt;

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

Q1)我可能做错了什么? Q2)在child_process中执行此操作有什么好处?如果是,我应该使用fork()还是spawn()以及如何使用?(我是node.js的新手,发现child_process非常混乱。)

1 个答案:

答案 0 :(得分:0)

您使用的所有fs函数都是异步的,因此您有效地尝试同时打开copy.txt数千次。

看起来你也永远不会更新bytesRead所以你的while循环将永远运行。