J'ai besoin de compresser un grand fichier (~450 Mbyte) avec la classe Java ZipOutputStream. Cette grande dimension cause un problème d'erreur "OutOfMemory" de l'espace du tas de ma JVM. Cela se produit parce que la méthode "zos.write(...)" stocke TOUT le contenu du fichier à compresser dans un tableau interne d'octets avant de le compresser.
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 solution naturelle sera d'agrandir l'espace mémoire du tas de la JVM, mais j'aimerais savoir s'il existe une méthode pour écrire ces données en continu. Je n'ai pas besoin d'un taux de compression élevé, donc je pourrais aussi changer l'algorithme.
Quelqu'un a-t-il une idée à ce sujet ?