mon application télécharge un fichier zip avec environ 350 fichiers. Un mélange de fichiers JPG et HTML. La fonction que j'ai écrite pour le faire fonctionne très bien, mais la décompression prend pour toujours. Au début, je pensais que la raison pourrait être que l'écriture sur la carte SD est lente. mais quand je décompresse le même zip avec une autre application sur mon téléphone, cela fonctionne beaucoup plus vite. Y a-t-il quelque chose que je puisse faire pour l'optimiser?Extraire Zip sur carte SD est très lent. Comment puis-je optimiser les performances?
est ici le code:
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();
}
}
grâce à CommonsWare i modifié mon code comme ceci:
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();
grande différence de performance. Merci beaucoup.
MERCI! Cela a effectivement fait le tour. – notme
Le lien fourni dans cette réponse ne fonctionne pas. –
@CommonsWare Le lien est en panne, pourriez-vous résoudre ce problème? – Scorchio