Java最有效的方法来检索ZIP中间的东西

Way*_*int 1 java zip

我正在寻找最有效的方法(在速度方面)从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++;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 7

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

ZipFile file = ...
ZipEntry entry = file.getEntry("folder1/picture.jpg");
InputStream in = file.getInputStream(entry);
Run Code Online (Sandbox Code Playgroud)