Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何读取Node.js中非常大(>;1GB)的tar.gz文件?_Javascript_File_Node.js_File Io_Filestream - Fatal编程技术网

Javascript 如何读取Node.js中非常大(>;1GB)的tar.gz文件?

Javascript 如何读取Node.js中非常大(>;1GB)的tar.gz文件?,javascript,file,node.js,file-io,filestream,Javascript,File,Node.js,File Io,Filestream,我以前从来没有这样做过,所以这可能是一些非常基本的事情,但我想我无论如何都会问 读取Node.js中非常大的文件的正确方法是什么?假设文件太大,无法一次全部读取。也可以说文件可以是.zip或.tar.gz格式 第一个问题,最好先解压文件并将其保存到磁盘(我现在在Mac上使用Stuffit来执行此操作),然后再处理该文件?或者您可以直接从压缩的.zip或.tar.gz版本中读取IO流吗?我想您需要知道压缩文件中内容的格式,所以您可能需要解压缩(刚刚发现这个.tar.gz文件实际上是一个.dat文件

我以前从来没有这样做过,所以这可能是一些非常基本的事情,但我想我无论如何都会问

读取Node.js中非常大的文件的正确方法是什么?假设文件太大,无法一次全部读取。也可以说文件可以是
.zip
.tar.gz
格式

第一个问题,最好先解压文件并将其保存到磁盘(我现在在Mac上使用Stuffit来执行此操作),然后再处理该文件?或者您可以直接从压缩的
.zip
.tar.gz
版本中读取IO流吗?我想您需要知道压缩文件中内容的格式,所以您可能需要解压缩(刚刚发现这个
.tar.gz
文件实际上是一个
.dat
文件)

那么主要的问题是,如何读取Node.js中的这个大文件?假设它是一个1GB的XML文件,我应该从哪里开始解析它呢?(不是,如何解析XML,但是如果您逐行阅读大型文件,那么如何解析XML之类的内容,这需要知道前面几行的上下文)

我看到了,但我害怕弄乱它。。。我不想炸毁我的电脑。只需寻找一些正确方向的指针。

内置了用于流解压缩和流XML解析的模块

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

这很有效:)

您想用它做什么?假设它是一个非常大的CSV,我只想为每行创建一个数据库记录。您有两个问题,1。是否有用于Node和2的流式zip文件读取器。是否有流式XML读取器(可以使用第一个流作为输入)。不确定有哪些选项,但这可能有助于您进行搜索…如果我想压缩包含GBs数据的目录,我应该怎么做?您需要立即处理该压缩还是只想压缩并保存?我可能只需要生成tar+gz child命令,我只需要压缩目录并保存它。我对Node.js不太熟悉,我对spawn tar+gz:\不太熟悉。也贴出了答案。谢谢,伙计:)