Мне нужно сжать один большой файл (~ 450 Мбайт) через класс Java ZipOutputStream. Это большое измерение вызывает проблему ошибки «OutOfMemory» моего пространства кучи JVM. Это происходит потому, что метод "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, но я хотел бы знать, есть ли способ записи этих данных в потоковом режиме. Мне не нужна высокая степень сжатия, поэтому я тоже могу изменить алгоритм.
кто-нибудь имеет представление об этом?