Android 3.x+ Java ZipFile 类 - 无法从大文件中读取 ZipEntries

标签 android file zip limits

如果我通过 ZipFile 类打开一个大 zip 文件 (250MB) 并尝试读取条目。这在模拟器和真实硬件中的 2.x 上运行良好。如果我在我的平板电脑(Asus Transformer 运行 4.0.3)或模拟器(3.2)上使用确切的一些代码,我无法读取任何条目。 ZipFile 类的 size() 函数始终返回零,并且 ZipFile 不返回任何 zip 条目。即使是我平板电脑上 ROM 附带的 zip 应用程序也无法读取任何条目。 zip 文件未损坏。我查过了。

从 ZipFile 读取的代码适用于所有具有较小 zip 文件的版本。 2.x 和 3.x/4.x 之间发生了什么变化??

我的测试文件是来自 HighVoltage Sid Collection 的 C64Music.zip。它包含超过 40.000 个文件,大小约为 250MB。

我不知道在哪里看。

最佳答案

这是 android ZipFile 实现的一个已知问题:

http://code.google.com/p/android/issues/detail?id=23207

基本上,zip 文件最多只支持 65k 条目。有一个名为 Zip64 的 zip 文件格式的扩展版本,它支持更多的条目。不幸的是,Android 上的 ZipFile 无法读取 Zip64。您可能会发现 C64Music.zip 文件是 Zip64 格式

一种解决方法是使用 Apache Commons Compress 库而不是 native 实现。他们的 ZipFile 版本支持 Zip64:http://commons.apache.org/compress/apidocs/org/apache/commons/compress/archivers/zip/ZipFile.html

关于Android 3.x+ Java ZipFile 类 - 无法从大文件中读取 ZipEntries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940896/

相关文章:

java - BaseExpandableListAdapter 以编程方式添加子项

c++ - 将 fpos_t 转换为 int 或 char

PHP:ZipArchive::close():重命名临时文件失败:没有这样的文件或目录

java - 文件删除和重命名不起作用

Powershell Write-Zip 部分文件夹树

swift - 用外行的话来说,zip 有什么作用?

android - Phonegap/Cordova - Android 中默认的前置摄像头

android - 如何在 Android 10 中创建公共(public)文件夹/文件

android - 在触摸自动完成编辑文本建议时隐藏软键盘

c - 我的 fscanf 输出一个很大的负数