2011-07-03 2 views
1

私は、可変サイズのジップ(4kから400kまで)、ジップのエントリの数が多い(1000と言います)。私は古典的な方法ですべてを解凍することができますが、パフォーマンスは本当に満足いくものではありません...パフォーマンスを向上させるのに役立つ別の方法、NIまたはネイティブベースを知っていますか?多数のジップを抽出します

ありがとうございます。

申し訳ありません..私はコードを投稿することを忘れ:)

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

あなたのプラットフォーム上のunzipのInfoZipバージョンが満足のいくものではないのはなぜですか? –

+0

@ThorbjørnRavn Andersenの鉱山は唯一の好奇心でした。時には物事が良くなると私は思っています。 – Blackbelt

答えて

2

あなたのコードがよさそうだ.... Android上で解凍

が遅くなります。比較的低速のCPU速度(ARMの方が確かにx86より悪い)とSDカードインタフェースの速度(同じ低速ファイルシステムを使って.zipを読み、圧縮されていないデータを書き込んでいることを忘れないでください)圧縮されていないデータは圧縮されたデータよりも数倍多くなる可能性がありますので、ここでかなりの書き込みが行われています。

あなたはそれを回避するためにかかわらず行うことができますいくつかあります。可能であれば

  • は、ストリーム処理を行う - いくつかのまれなケースでは、ファイル全体の先行投資を解凍よりも高速であることを証明するかもしれません(たとえば、あなたがいる場合にのみいくつかのファイルをzipからアクセスしたい場合)
  • 必要に応じてファイルを解凍 - バックグラウンドで怠け者...一般的には、あなたの視覚的なフィードバックをユーザに与え、あなたのzipが解凍している間バックグラウンドで(スレッドに低い優先順位を与え、偶数の場合は一時停止することを覚えておいてください)
+0

私は心に留めておきます。 – Blackbelt

関連する問題