Uygulamam yaklaşık 350 dosya içeren bir zip dosyası indiriyor. JPG ve HTML dosyalarının bir karışımı. Bunu yapmak için yazdığım işlev gayet iyi çalışıyor ama unzipping her zamankinden daha iyi. İlk başta, sd kartına yazmanın yavaş olabileceğini düşündüm. ama aynı zip'i telefonumdaki başka bir uygulamayla açtığımda çok daha hızlı çalışıyor. optimize etmek için yapabileceğim bir şey var mı? CommonsWare içinSD Karttan Zip Çıkarma çok yavaş. Performansı nasıl optimize edebilirim?
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();
}
}
sayesinde ben böyle kodumu modifiye:
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();
büyük performans farkı burada
kodudur. Çok teşekkürler.
TEŞEKKÜRLER yardımcı olacaktır! Bu aslında hile yaptı. – notme
Bu cevapta sağlanan bağlantı çalışmıyor. –
@CommonsWare Bağlantı kesildi, lütfen bunu düzeltebilir misiniz? – Scorchio