我以前从来没有这么做过,所以这可能是非常基本的东西,但我想我还是会问。
在Node.js中读取非常大的文件的正确方法是什么?假设文件太大而无法一次读取。另请说该文件可以.zip
或.tar.gz
格式输入。
第一个问题,最好首先解压缩文件并将其保存到磁盘(我现在在Mac上使用Stuffit来执行此操作),然后使用该文件?或者您可以直接从压缩的.zip
或.tar.gz
版本中读取IO流吗?我想你需要知道压缩文件中内容的格式,所以你可能需要解压缩(刚发现这个.tar.gz
文件实际上是.dat
文件)...
然后主要问题是,如何在Node.js中读取这个大文件?假设它是一个1GB的XML文件,我应该在哪里开始解析它? (不是,如何解析XML,但是如果你逐行读取大文件,你如何解析像XML这样需要知道前一行上下文的东西。)
我见过fs.createReadStream
,但我不敢乱用它......不想爆炸我的电脑。只是寻找正确方向的一些指示。
答案 0 :(得分:9)
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);
答案 1 :(得分:1)
我们还可以将目录压缩如下:
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');
}
});
这很好用:)