我需要通过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