如何在Node.js中读取非常大(> 1GB)的tar.gz文件?
我从来没有这样做过,所以这可能是一个非常基本的东西,但我想我会问。
在Node.js中读取非常大的文件的正确方法是什么? 说这个文件太大,一次读不完。 也可以说文件可以以.zip
或.tar.gz
格式进入。
第一个问题,最好是先解压缩文件并保存到磁盘(我现在用Mac上的Stuffit来做这个),然后使用该文件? 或者你可以直接从压缩的.zip
或.tar.gz
版本读取IOstream? 我想你需要知道压缩文件中的内容的格式,所以你可能需要解压缩(只是发现这个.tar.gz
文件实际上是一个.dat
文件)…
那么主要的问题是,如何在Node.js中读取这个大文件? 说这是一个1GB的XML文件,我应该在哪里开始parsing它? (不是,如何parsingXML,但是如果您正在逐行阅读大文件,那么如何parsing需要知道前面行的上下文的XML)。
我已经看过fs.createReadStream
,但是我怕弄乱它…不想炸我的电脑。 只是在正确的方向寻找一些指针。
内置的zlib模块用于stream解压, sax用于streamXMLparsing
var fs = require('fs'); var zlib = require('zlib'); var sax = require('sax'); var saxStream = sax.createStream(); // add your xml handlers here fs.createReadStream('large.xml.gz').pipe(zlib.createUnzip()).pipe(saxStream);
我们也可以压缩目录,如下所示:
var spawn = require('child_process').spawn; var pathToArchive = './very_large_folder.tar.gz'; var pathToFolder = './very_large_folder'; var tar = spawn('tar', ['czf', pathToArchive, pathToFolder]); tar.on('exit', function (code) { if (code === 0) { console.log('completed successfully'); } else { console.log('error'); } });
这工作很好:)