質問

ようにしているの解凍は約8000gzipファイル形式はJava.ってみたで使GZIPInputStreamがそのパフォーマンスは何か。

誰でも知っている代替案の解凍はgzipアーカイブ?またZipInputStreamで認識されていないgzip形式です。

よろしくお願いします。

役に立ちましたか?

解決

バッファリングを使用する必要があります。小さなデータを書くことは非効率的です。圧縮の実装は、Sun JDKのネイティブコードです。バッファリングされたパフォーマンスではない場合でも、通常は妥当なファイルまたはネットワークI / Oを超えるはずです。

OutputStream out = new BufferedOutputStream(new GZIPOutputStream(rawOut));

InputStream in = new BufferedInputStream(new GZIPInputStream(rawIn));

解凍/圧縮アルゴリズムの実装にはネイティブコードが使用されるため、使用後はストリーム(元のストリームだけでなく)を閉じるように注意してください。たくさんの「デフレーター」がぶらぶらしていると、パフォーマンスが非常に悪いことがわかりました。

ZipInputStream はファイルのアーカイブを処理します。これは、ストリームの圧縮とはまったく異なります。

他のヒント

GZipInputStream のパフォーマンスがひどいと言ったら、もっと具体的に教えていただけますか? CPUのボトルネックであるか、I / Oのボトルネックであるかを確認しましたか?入力と出力の両方でバッファリングを使用していましたか?使用しているコードを投稿できれば、非常に役立ちます。

マルチコアマシンを使用している場合、 GZipInputStream を引き続き使用できますが、コアごとに1つの複数のスレッドを使用し、処理するファイルの共有キューを使用します。 (1つのファイルは1つのスレッドでのみ処理されます。)これは、I / Oに縛られていると事態を悪化させる可能性がありますが、試してみる価値はあります。

そのようなスケールするためには、ゴーネイティブ、プラットフォーム要件は限られています。利用できるJNI呼び出図書館を呼び出すネイティブコマンドを使用 ProcessBuilder.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top