Um Zip-Datei zu entpacken Ich habe Klassen aus dem Paket java.util.zip * durch Bezugnahme this verwendet und es funktioniert jedoch zum Entpacken einer Datei von 40 MB dauert 59 Sekunden. Wenn ich gleiche Zip-Datei auf iPhone-Projekt (wir entwickeln App für beide Plattformen - Android & iPone &, die Funktionalität zum Entpacken Zip-Datei & entpackten Inhalt zu SDCARD-Android oder Dokument-Verzeichnis - iPhone) haben, dauert es nur 14 Sekunden. Die iPhone App verwendet ziparchive.So entpacken Sie große Zip-Datei und schreiben Sie in weniger Zeit auf SDCARD
Also meine Frage lautet:
1.From obiges Experiment, dass es löscht & Datei Schreiboperation unzipping in Java sdcard mehr Zeit im Vergleich zu iPhone App verbraucht, also entschied ich mich unzipping C/C++ Ebene & zu verwenden Dateischreibvorgang mit NDK. Ist das die richtige Wahl?
2.Ich habe auf Google gesucht, stackoverflow & einige vorgeschlagen, minizip zu verwenden, aber es gibt keine ausreichende Hilfe zur Verwendung von Minizip in Android. Hat anyboday Minizip für Android ausprobiert?
3.I versuchte auch NDK Entwicklung für libz, um mein Ziel zu erreichen, wie Libz in NDK hinzugefügt wird, aber nicht bekommen, wie man es benutzt. Ist jemand in NDK libz versucht?
4. Gibt es ein anderes Framework in Java oder C/C++, das große Zip-Datei entpackt & schreiben Sie sie in weniger Zeit auf SDCARD?
Bitte helfen Sie mir.
Hier ist mein Java Dekomprimieren Code:
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;
}
Ich vermute, dass seine SD-Karte Teil funktioniert. Schreiben auf SD-Karten kann sehr sehr langsam sein, besonders auf Low-End-Android-Handys oder billige SD-Karten.Die Zeit zum Entpacken kann auch auf Low-End-Android-Telefonen suspekt sein, wie es bei älteren iPhones der Fall wäre, da Unziping direkt an die Prozessorgeschwindigkeit gebunden wird. –
Um @RyanPoolos Vorschlag über die SD-Karte zu testen, entpacken Sie die Dateien in den internen Speicher der Apps (das Verzeichnis, das von http://developer.android.com/reference/android/content/Context.html#getFilesDir (\)) und zurückgegeben wird Schau, ob die Zeit dem iPhone näher kommt. Das Java-Zip-Paket sollte alleine ziemlich effizient sein. –
Sie könnten auch die separaten Funktionen für das Entpacken und Schreiben einstellen, um zu sehen, was auf beiden Plattformen tatsächlich Zeit kostet. –