如果我通过 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/