要解压缩 zip 文件,我通过引用this使用了包 java.util.zip* 中的类,它可以正常工作,但是解压缩 40MB 的文件需要 59 秒。当我在 iPhone 项目上尝试相同的 zip 文件时(我们正在为两个平台开发应用程序 - Android 和 iPone 并且具有解压缩 zip 文件并将解压缩的内容保存到 SDCARD-Android 或文档目录 - iPhone 的功能),只需要 14 秒。iphone 应用程序使用ziparchive。
所以我的问题是:
1.从上面的实验可以看出,Java 中对 SDCARD 的解压和文件写入操作比 iPhone 应用程序消耗更多时间,所以我决定使用 C/C++ 级别的使用 NDK 的解压和文件写入操作。这是正确的选择吗?
2.我在 google、stackoverflow 和一些建议使用minizip上进行了搜索,但对于如何在 android 中使用 minizip 没有足够的帮助。有人尝试过适用于 android 的 minizip 吗?
3.我还尝试了libz的NDK开发来实现我的目标,因为Libz被添加到NDK中但不知道如何使用它。有人在 NDK 中尝试过 libz 吗?
4.Java 或 C/C++ 中是否有任何其他框架可以解压缩大型 zip 文件并在更短的时间内将它们写入 SDCARD?
请帮我。
这是我的 Java 解压缩代码:
public String unzip() {
String result;
try {
FileInputStream fin = new FileInputStream(this.filePath);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
Log.v("Unzip", "Unzipping " + ze.getName());
if (ze.isDirectory()) {
_dirChecker(ze.getName());
} else {
// Read 16 k at a time
byte[] buffer = new byte[16*1024];
int read;
FileOutputStream fout = new FileOutputStream(this.location+ "/" + ze.getName());
while ((read = zin.read(buffer)) != -1)
{
fout.write(buffer, 0, read);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
result = "success";
} catch (Exception e) {
Log.e("unzip", "unzip", e);
result = "failure";
}
return result;
}