JavaクラスZipOutputStreamを介して1つの大きなファイル(〜450 Mバイト)を圧縮する必要があります。この大きなディメンションにより、JVMヒープスペースの「OutOfMemory」エラーの問題が発生します。これは、「zos.write(...)」メソッドが、圧縮する前に圧縮するすべてのファイルコンテンツを内部バイト配列に格納するために発生します。
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(filePath);
zos.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1)
{
zos.write(data, 0, count);
}
origin.close();
自然な解決策はJVMのヒープメモリスペースを拡大することですが、このデータをストリーミング方式で書き込む方法があるかどうかを知りたいと思います。高い圧縮率は必要ないので、アルゴリズムも変更できます。
誰かがそれについて考えを持っていますか?