读取和解析大文件

时间:2016-09-14 20:26:12

标签: node.js stream fs

我有一个非常大的文件,我需要解析并读取“BEGIN DATA”和“END DATA”分隔符之间的数据,然后执行像解码块这样的操作。

我可以使用“fs”库轻松打开文件,如下所示:

  fs.readFile(files[0], 'utf8', function (err, data) {
  if (err) return console.log(err);
  console.log(data)
 });

但是,我需要通过流读取块中分隔符之间的数据,这样就不会占用大量内存。

        -----BEGIN DATA-----
        MIIEzDCCArSgAwIBAgIVCugKYzMN5ra8zPWxYE8pUU9SxjYSMA0GCSqGSIb3DQEB
        CwUAMHAxCzAJBgNVBAYTAkdCMRUwEwYDVQQIDAxXYXJ3aWNrc2hpcmUxEDAOBgNV
        BAcMB1dhcndpY2sxEDAOBgNVBAoMB0VudHJ1c3QxETAPBgNVBAsMCFBLSSBURUFN
        -----END DATA-----
        -----BEGIN DATA-----
        MIIETzCCAjegAwIBAgIVBShP2Mx74DZEyNKwYZZPGntRmSWnMA0GCSqGSIb3DQEB
        DQUAMHIxCzAJBgNVBAYTAkdCMRUwEwYDVQQIDAxXYXJ3aWNrc2hpcmUxEDAOBgNV
        BAcMB1dhcndpY2sxDDAKBgNVBAoMA0lCTTERMA8GA1UECwwIUEtJIFRFQU0xGTAX
        5/62
        -----END DATA-----

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用与节点fs.createReadStream耦合的流库,在您的情况下Highland.js中的splitBy方法是合适的:

_(fs.createReadStream(files[0], { encoding: 'utf8' }))
  .splitBy('-----BEGIN DATA-----')
  .splitBy('-----END DATA-----')
  .each(_.log)