Meine App lädt eine Zip mit etwa 350 Dateien herunter. Eine Mischung aus JPG- und HTML-Dateien. Die Funktion, die ich schrieb, um es zu tun funktioniert gut, aber das Entpacken dauert für immer. Zuerst dachte ich, der Grund könnte sein, dass das Schreiben auf die SD-Karte langsam ist. aber wenn ich die gleiche Zip mit einer anderen App auf meinem Handy entzippe, funktioniert es viel schneller. Gibt es etwas, was ich tun könnte, um es zu optimieren?Extracting Zip auf SD-Karte ist sehr langsam. Wie kann ich die Leistung optimieren?
hier ist der Code:
int size;
byte[] buffer = new byte[2048];
FileOutputStream outStream = new FileOutputStream(targetFolder + entry.getName());
BufferedOutputStream bufferOut = new BufferedOutputStream(outStream, buffer.length);
while((size = zipStream.read(buffer, 0, buffer.length)) != -1) {
bufferOut.write(buffer, 0, size);
}
bufferOut.flush();
bufferOut.close();
großer Unterschied in der Leistung:
private void extract() {
try {
FileInputStream inStream = new FileInputStream(targetFilePath);
ZipInputStream zipStream = new ZipInputStream(new BufferedInputStream(inStream));
ZipEntry entry;
ZipFile zip = new ZipFile(targetFilePath);
//i know the contents for the zip so i create the dirs i need in advance
new File(targetFolder).mkdirs();
new File(targetFolder + "META-INF").mkdir();
new File(targetFolder + "content").mkdir();
int extracted = 0;
while((entry = zipStream.getNextEntry()) != null) {
if (entry.isDirectory()) {
new File(targetFolder + entry.getName()).mkdirs();
} else {
FileOutputStream outStream = new FileOutputStream(targetFolder + entry.getName());
for (int c = zipStream.read(); c != -1; c = zipStream.read()) {
outStream.write(c);
}
zipStream.closeEntry();
outStream.close();
extracted ++;
}
publishProgress(""+(int)extracted*100/zip.size());
}
zipStream.close();
inStream.close();
//
new File(targetFilePath).delete();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
dank CommonsWare ich meinen Code wie folgt geändert. Vielen Dank.
DANK helfen! Das hat tatsächlich der Trick gemacht. – notme
Der Link in dieser Antwort funktioniert nicht. –
@CommonsWare Der Link ist nicht erreichbar, können Sie das bitte beheben? – Scorchio