2011-02-16 12 views
6

Ben android 2.5mb (1087 dosya - * .html, * .css ve * .db) bir .zip dosyasını unzip gerekir, ben var java.util.zip kullandı, iyi çalışıyor, ancak performansı iyileştirmem gerekiyor, en son 1.10 dakikada unzip işlemini, bu süreyi azaltmam gerekiyor. örneğin, performansını artırmak için bazı recomendations izlemiştir:Android içinde java.util.zip kullanmanın daha hızlı bir şekilde dosyaları unveriyorum

  • Kullanım BufferedInputStream, FileOutputStream ve BufferedOutputStream.
  • blok zip oku

bayt veri [] = Yeni byte [2048]; ((counter = bisMediaFile.read (veri, 0, 2048))! = -1) { bosMediaFile.write (veri, 0, sayaç); }

Kodumu geliştirmenin bir yolu var mı? Programlı olarak kullanmak için üçüncü parti zip programlarını arıyordum, örneğin 7ZipJBinding denedim, ama android bunu desteklemiyor gibi görünüyor, çünkü sevenzipjbinding.jar ve sevenzipjbinding-AllPlatforms.jar başvuruyor ama bir hata alıyorum: "Native Sevenzipjbinding-AllPlatforms'da Algılanan Kütüphaneler ". 7zip ana sayfasında MAC, Windows, Linux için versiyonlar var ama ben android hakkında hiçbir şey görmedim. Android'de dosyaları açmak için başka kütüphane önerebilir misiniz?

Bu benim tüm kodu:

public static void processZipFile(String strBinaryPath,String strExtractPath, String strDestinationDBPath) throws Exception 
{ 
    ZipFile zipInFile = null; 
    try 
    { 
     if (strExtractPath != null) 
     { 
      zipInFile = new ZipFile(strBinaryPath); 
      for (Enumeration<? extends ZipEntry> entries = zipInFile.entries(); entries.hasMoreElements();) 
      { 
       ZipEntry zipMediaEntry = entries.nextElement(); 
       if (zipMediaEntry.isDirectory()) 
       { 
        File mediaDir = new File(String.format("%s\\%s", strExtractPath, zipMediaEntry.getName())); 
        mediaDir.mkdirs(); 
       } 
       else 
       { 
         BufferedInputStream bisMediaFile = null; 
         FileOutputStream fosMediaFile = null; 
         BufferedOutputStream bosMediaFile = null; 
         try 
         { 
           String strFileName = String.format("%s\\%s", strExtractPath, zipMediaEntry.getName()); 
           File uncompressDir = new File(strFileName).getParentFile(); 
           uncompressDir.mkdirs(); 

           //if is a database file, extract to other path : android.movinginteractive.com/databases 
           if(strFileName.contains(".db")) 
            strFileName = String.format("%s\\%s", strDestinationDBPath, ExtractDBName(zipMediaEntry.getName())); 

           bisMediaFile = new BufferedInputStream(zipInFile.getInputStream(zipMediaEntry)); 
           fosMediaFile = new FileOutputStream(strFileName); 
           bosMediaFile = new BufferedOutputStream(fosMediaFile); 

           int counter; 
           byte data[] = new byte[2048]; 

           while ((counter = bisMediaFile.read(data, 0, 2048)) != -1) 
           { 
            bosMediaFile.write(data, 0, counter); 
           } 
         } 
         catch (Exception ex) 
         { 
          throw ex; 
         } 
         finally 
         { 
          if (bosMediaFile != null) 
          { 
           bosMediaFile.flush(); 
           bosMediaFile.close(); 
          } 
          if (bisMediaFile != null) 
           bisMediaFile.close(); 
         } 
       } 
      } 


     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     if (zipInFile != null) 
      zipInFile.close(); 
     File flZipToDelete = new File(strBinaryPath); 
     if(flZipToDelete.exists()) 
      flZipToDelete.delete(); 

    } 
} 
+0

Saatin nerede harcanacağını görmek için kodunuzu profil/zamanlamanız gerekir. Makul bir uygulamanın ne kadar hızlı yapılması gerektiğini görmek için 7zip ya da Info-ZIP'in unzip'ini referans olarak kullanabilirsiniz. –

+0

1087 bir çok dosya, sorun olabilir mi? ayrıca, daha büyük bir tampon ile denediniz mi? – bigstones

+0

Ok Teşekkürler, önerileri deneyeceğim ve bundan sonra yorum yapacağım. Çok teşekkür ederim – Jhon

cevap

0

Sana Ayıklama dosyaları için bir C veya C++ kod parçacığını bulmak ve Android NDK aracılığıyla çalıştırabilir eminim. Bu, hangi performansın kazanabileceğinden emin değilim dedi.