gpt4 book ai didi

java - 使用 Java 压缩 ZIP 中的大文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:59 25 4
gpt4 key购买 nike

我需要通过 Java 类 ZipOutputStream 压缩一个大文件(~450 MB)。这个大尺寸导致我的 JVM 堆空间出现“OutOfMemory”错误的问题。发生这种情况是因为“zos.write(...)”方法在压缩之前将所有要压缩的文件内容存储在内部字节数组中。

            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的堆内存空间,但我想知道有没有一种方法可以将这些数据以流的方式写入。我不需要高压缩率,所以我也可以更改算法。

有人知道吗?

最佳答案

根据您对 Sam 回复的评论,您显然创建了一个 ZipOutputStream,它包装了一个 ByteArrayOutputStream。 ByteArrayOutputStream 当然会将压缩后的结果缓存在内存中。如果要将其写入磁盘,则必须将 ZipOutputStream 包裹在 FileOutputStream 周围。

关于java - 使用 Java 压缩 ZIP 中的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com