12

私はこれまでこれをする必要がなかったので、これはおそらく本当に基本的なことですが、とにかくお願いしたいと思いました。

Node.jsで非常に大きなファイルを読み取る正しい方法は何ですか?ファイルが大きすぎて一度にすべてを読み取ることができないとします。.zipまた、ファイルがまたは.tar.gz形式で入ってくる可能性があると言います。

最初の質問ですが、最初にファイルを解凍してディスクに保存し(MacでStuffitを使用してこれを実行しています)、次にそのファイルで作業するのが最善ですか?.zipまたは、圧縮バージョンまたはバージョンから直接IOストリームを読み取ることができます.tar.gzか?圧縮ファイルのコンテンツの形式を知っている必要があると思うので、おそらく解凍する必要があります(この.tar.gzファイルが実際にはファイルであることがわかりました.dat)...

次に、主な問題は、Node.jsでこの大きなファイルを読み取るにはどうすればよいですか?1GBのXMLファイルだとしたら、解析を開始するにはどこを見ればよいですか?(XMLを解析する方法ではありませんが、大きなファイルを1行ずつ読み取る場合、前の行のコンテキストを知る必要があるXMLのようなものをどのように解析しますか)。

私は見たことがありfs.createReadStreamますが、それをいじくりまわすのが怖いです...私のコンピュータを爆発させたくありません。正しい方向にいくつかのポインタを探しているだけです。

4

2 に答える 2

9

ストリーム解凍用の組み込みzlibモジュールと、ストリーム XML 解析用のsaxがあります。

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);
于 2012-06-18T04:35:27.220 に答える
2

次のようにディレクトリを圧縮することもできます。

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

これはうまくいきました:)

于 2016-04-05T09:41:30.353 に答える