Tengo la necesidad de comprimir un archivo grande (~ 450 Mbyte) a través de la clase Java ZipOutputStream. Esta gran dimensión causa un problema de error "OutOfMemory" de mi espacio de montón JVM. Esto sucede porque el método "zos.write (...)" almacena TODO el contenido del archivo para comprimirlo en una matriz de bytes interna antes de comprimirlo.Para comprimir un archivo grande en un ZIP con Java
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();
La solución natural será la de ampliar el espacio de memoria de almacenamiento dinámico de la JVM, pero me gustaría saber si hay un método para escribir estos datos en una forma de streaming. No necesito una alta tasa de compresión, así que podría cambiar el algoritmo también.
¿alguien tiene una idea al respecto?
¿Qué tan grande es BUFFER? –
Como escribí 2048 – robob