1

我正在寻找最有效的方法(在速度方面)从 ZIP 文件的中间检索一些文件。

例如,我有 ZIP 文件,其中包括 700 个文件夹(标记为 1 到 700)。每个文件夹等于图片和 mp3 文件。有一个名为 Info 的特殊文件夹,其中包含 XML 文件。问题是,我需要遍历此 ZIP 文件以查找 XML 文件,然后显示来自所需文件夹的图像。我正在使用 ZipFile 方法(因此我正在遍历整个 ZIP 文件,即使我想要文件夹 666,我也需要浏览 ZIP 文件中的 665 个项目)-> 从 ZIP 文件中选择非常慢。

我想问你,如果你遇到过类似的问题,你是怎么解决的?Java中是否有任何方法可以将我的ZIP文件转换为虚拟文件夹以更快地浏览它?是否有任何外部库,在时间方面效率最高?

源代码片段:

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

和方法可用于访问 ZIP 存档中的特定文件ZipFile.getEntry()ZipFile.getInputStream()例如:

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