2013年10月24日 星期四

Read a BIG file in Node.js

寫程式的人常有需要處理到大型的檔案讀取,在Node.js中如果直接使用原生的fs.readFile()來讀檔,則會發生"RangeError: length > kMaxLength"之類的Exception,範例程式如下:

//test-fs.js
var fs = require('fs');
fs.readFile('../1G-File.txt', function(e,d){
  if(e) console.log(e);
  console.log(d);
});

執行的結果如下:

$ node test-fs.js
buffer.js:194
      this.parent = new SlowBuffer(this.length);
                    ^
RangeError: length > kMaxLength
    at new Buffer (buffer.js:194:21)
    at fs.js:220:16
    at Object.oncomplete (fs.js:107:15)


這時候借用第三方套件"lazy"+"fs.createReadStream()"的話,將可以很順利的解決讀取大檔案的問題喔∼

var lazy = require("lazy")
  , fs  = require("fs");
new lazy(fs.createReadStream('../1G-File.txt'))
   .lines
   .forEach(function(line){
       console.log(line.toString());
   }
);

執行上將會很順利...這邊不秀了∼給大家參考