java - OutOfMemoryError 读取一个巨大的 ZipFile

标签 java android out-of-memory zip

我正在尝试使用 java.util.zip API 在 Android 中打开一个大的(大约 1 GiB)zip 文件并收到以下错误:

java.lang.OutOfMemoryError
at java.util.HashMap.makeTable(HashMap.java:555)
at java.util.HashMap.doubleCapacity(HashMap.java:575)
at java.util.HashMap.put(HashMap.java:405)
at java.util.zip.ZipFile.readCentralDir(ZipFile.java:366)
at java.util.zip.ZipFile.<init>(ZipFile.java:132)
at java.util.zip.ZipFile.<init>(ZipFile.java:103)
at com.foo.bar.zip.archive.ZipArchive.<init>(ZipArchive.java:44)

我完全理解文件的大小大大超过了内存限制,但是这个问题有什么解决方法吗?提前致谢。

最佳答案

我怀疑问题不是文件的大小,而是条目的数量,因为它在缓存 Zip 表条目时失败。

你自己的选择是;

  • 分解 Zip,这样里面就没有那么多文件了。
  • 获得更多内存
  • 编写您自己的库来读取 ZIP。

关于java - OutOfMemoryError 读取一个巨大的 ZipFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13010546/

相关文章:

Java:从 .NET 构造函数转换

java - 如何解决 YourLayout 类型的方法 addView(View, int, LinearLayout.LayoutParams) 必须重写或实现父类(super class)型方法

android - 从 ListView 的自定义适配器中的 Intent 服务接收结果

java - 运行低于 Lollipop 的设备上的 CameraManager

c# - 内存不足和溢出异常创建小数组

java - Android 内存不足错误位图

java - SoftReferences 与 Weakreferences/OutOfMemoryError

java - Elasticsearch Mustache 可选参数

java - 时间广场日历app的实现方法

java - android中如何将文件上传到服务器?