我有一个非常大的文件,我需要解析并读取“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-----
答案 0 :(得分:1)
最简单的方法是使用与节点fs.createReadStream
耦合的流库,在您的情况下Highland.js中的splitBy
方法是合适的:
_(fs.createReadStream(files[0], { encoding: 'utf8' }))
.splitBy('-----BEGIN DATA-----')
.splitBy('-----END DATA-----')
.each(_.log)