我需要通過Java類ZipOutputStream壓縮一個Big文件(〜450 Mbyte)。這個大的維度導致了我的JVM堆空間的「OutOfMemory」錯誤。發生這種情況是因爲「zos.write(...)」方法在壓縮之前將所有文件內容存儲在內部字節數組中。使用Java壓縮ZIP文件中的大文件
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的堆內存空間,但我想知道是否有寫以流的方式這個數據的方法。我不需要高壓縮率,所以我也可以改變算法。
沒有人有想法嗎?
BUFFER有多大? – 2009-11-20 14:34:31
正如我寫的2048 – robob 2009-11-20 14:55:59