1

私は、ZIPファイルの途中からファイルを取得するための(速度の点で)最も効率的な方法を探しています。

たとえば、700個のフォルダ(1から700のタグが付いている)を含むZIPファイルがあります。各フォルダは、画像とmp3ファイルに相当します。XMLファイルを含むInfoと呼ばれる特別なフォルダがあります。問題は、XMLファイルを見つけるためにこのZIPファイルを反復処理する必要があり、それから目的のフォルダーからの画像を表示していることです。私はZipFileアプローチを使用しています(したがって、ZIPファイル全体を反復処理しています。フォルダー666が必要な場合でも、ZIPファイル内の665項目を処理する必要があります)->ZIPファイルからの選択は非常に遅いです。

同様の問題に直面した場合、どのように解決しましたか?私のZIPファイルを仮想フォルダに変えてはるかに速く閲覧するJavaのアプローチはありますか?時間的に最も効率的な外部ライブラリはありますか?

ソースコードスニペット:

try {
  FileInputStream fin = new FileInputStream(
      "sdcard/external_sd/mtp_data/poi_data/data.zip");
  ZipInputStream zin = new ZipInputStream(fin);
  ZipEntry ze = null;
  while ((ze = zin.getNextEntry()) != null) {
    // Log.d("ZE", ze.getName());
    if (ze.getName().startsWith("body/665/")) {
      // Log.d("FILE F", "soubor: "+ze.getName());
      if (ze.getName().endsWith(".jpg")
          || ze.getName().endsWith(".JPG")) {
        Log.d("OBR", "picture: " + ze.getName());

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int count;

        while ((count = zin.read(buffer)) != -1) {
          baos.write(buffer, 0, count);
        }
        byte[] bytes = baos.toByteArray();

        bmp = BitmapFactory.decodeByteArray(bytes, 0,
            bytes.length);
        photoField.add(bmp);
        i++;
      }
    }
  }
}
4

1 に答える 1

7

ZipFile.getEntry()andメソッドを使用して、ZIPアーカイブ内のZipFile.getInputStream()特定のファイルにアクセスできます。例えば:

ZipFile file = ...
ZipEntry entry = file.getEntry("folder1/picture.jpg");
InputStream in = file.getInputStream(entry);
于 2012-06-01T17:28:37.350 に答える