Ho la necessità di comprimere un file Big (~ 450 Mbyte) tramite la classe Java ZipOutputStream. Questa grande dimensione causa un problema di errore "OutOfMemory" del mio spazio heap JVM. Ciò accade perché il metodo "zos.write (...)" memorizza TUTTO il contenuto del file da comprimere in un array di byte interno prima di comprimerlo.Per comprimere un file grande in 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 soluzione naturale sarà quello di allargare lo spazio di memoria heap della JVM, ma vorrei sapere se c'è un metodo di scrivere questi dati in modo streaming. Non ho bisogno di un alto tasso di compressione in modo da poter cambiare anche l'algoritmo.
qualcuno ha un'idea a riguardo?
Quanto è grande BUFFER? –
Come ho scritto 2048 – robob