2011-07-03 31 views
1

我有一個可變大小的拉鍊(稱爲從4k到400k),一個拉鍊條目的大量(說1000)。我設法以經典的方式解壓全部,但性能並不令人滿意......您是否知道一種不同的方式,即基於nio或native的方法,可以幫助提高性能?提取大量的拉鍊

在此先感謝。

抱歉..我忘記郵代碼:)

zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(f))); 
      while ((zentry = zis.getNextEntry()) != null) { 
       zentryName = zentry.getName(); 
       File unzippedFile = new File(staging, zentryName); 
       BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(unzippedFile)); 
       byte buffer[] = new byte[32768]; 
       while ((read = zis.read(buffer, 0, 32768)) > 0) { 
        fos.write(buffer, 0, read); 
       } 


       f.delete(); 
       fos.flush(); 
       fos.close(); 
       zis.closeEntry(); 
      } 


      zis.close(); 
+2

發佈您的當前代碼。 – Wroclai

+0

爲什麼您的平臺上的InfoZip版本解壓縮不能令人滿意? –

+0

@ThorbjørnRavn Andersen礦只是好奇心..有時事情可以做得更好我猜.. – Blackbelt

回答

2

您的代碼看起來不錯....

解壓在Android將是緩慢的。這是相對較低的CPU速度(對於這種類型的操作,ARM肯定比x86更差)以及SD卡接口的速度(請記住,您正在讀取.zip並使用相同的相對較低速度的文件系統來寫入解壓縮的數據) - 未壓縮的數據可能比壓縮數據多幾倍,所以我們在這裏談論了很多寫道。

很少有事情可以做,但要解決它:如果可能的話

  • 做流處理 - 在某些罕見的情況下,它可能被證明是比解壓縮整個文件的前期(例如速度更快,如果你只想要從zip中訪問幾個文件)
  • 根據需要解壓縮文件 - 懶惰,在後臺...一般情況下 - 您可能會給用戶一些視覺反饋,並讓她在您的壓縮文件解壓縮時做一些操作在後臺(記住給予線程低優先級,並可能暫停每一個甚至)
+0

不能爲兩者,但謝謝..我會記住:) – Blackbelt