2017-05-02 8 views
0

私は以下の要件を持っています: zipまたはtar.gzファイルを解凍する必要があります。このコードが実行されるターゲットプラットフォームは、AEM 6.1環境です。これまでシステムにはいくつかのパフォーマンス上の問題がありました。特に、メモリ使用量は非常に高かった。したがって私は記憶を救う必要があります。 zip/tar.gzファイルには、いくつかのテキストファイル、SVG、PNG、EPSファイル、および必要のないファイルが含まれています。アーカイブファイルはダウンロードされ、ByteArrayInputStreamとして利用可能になります。Java:メモリー使用量の少ないファイル(zipまたはtar.gz)を解凍する方法は?

私はいくつかの研究を行い、それを行う最善の方法を理解しようとしました。 Apacheコモンズは、アーカイブとJDKをアンパックするためのライブラリを提供します。しかし、どの実装でメモリを少なくするかはわかりませんでした。

まだ圧縮されている間にアーカイブを開いて、そのファイルを個別に読み込んで展開するのが最善の方法だと思います。だから私は、圧縮されたアーカイブとそれを含むファイルの一つをメモリに入れておくだけです。

しかし、どの実装がこの可能性を提供しているのか、それを行うためのよりよい方法があるかはわかりません。

誰かに良いアドバイスがありますか?

ありがとうございます。 JDKから

+0

オプションと測定されたメモリの使用は試しましたか? – Jens

答えて

2

ZipInputStreamはあなたが必要なものだけを行います。https://docs.oracle.com/javase/8/docs/api/java/util/zip/ZipInputStream.html

あなたはgetNextEntry().getName()経由で必要なエントリを見つけて、ちょうどそのエントリのバイトを読み取ることができます。 ZipInputStream.readメソッドを使用すると、バッファ付き読み込みを実装できます。したがって、メモリ内のすべての圧縮解除エントリを必要としない場合(読み込み時にエントリを出力に書き込む場合)は簡単にメモリ消費を制限できます。

この場合、余分なライブラリは不要なので、アプリケーションのフットプリントも最小限に抑えることができます。

関連する問題