zip ファイルを解凍するには、これを参照してパッケージ java.util.zip* のクラスを使用しましたが、正しく動作しますが、40MB のファイルを解凍するには 59 秒かかります。iPhoneプロジェクトで同じzipファイルを試したとき(私たちは両方のプラットフォーム用のアプリを開発しています-AndroidとiPone&zipファイルを解凍し、解凍したコンテンツをSDCARD-Androidまたはドキュメントディレクトリ-iPhoneに保存する機能を備えています)、14秒しかかかりません。iPhone アプリはziparchiveを使用します。
だから私の質問は:
1.上記の実験から、JavaでのSDCARDへの解凍&ファイル書き込み操作は、iPhoneアプリに比べて時間がかかることが判明したので、NDKを使用したC/C++レベルの解凍&ファイル書き込み操作を使用することにしました。これは正しい選択ですか?
2.Google、stackoverflow、および minizip を使用するよう提案されたものを検索しましたが、Android で minizip を使用する方法について十分なヘルプがありません。Android用のミニジップを試した人はいますか?
3.LibzはNDKに追加されていますが、使用方法がわからないため、目標を達成するためにlibzのNDK開発も試みました。NDK で libz を試した人はいますか?
4.大きなzipファイルを解凍してSDCARDに短時間で書き込むJavaまたはC/C++の他のフレームワークはありますか?
私を助けてください。
ここに私の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;
}