如何在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'); } }); 

这工作很好:)