Java的最有效的方法来检索出来的东西ZIP的中间(Java most efficient way

2019-10-16 18:52发布

我在寻找最有效的方式(在速度方面)来检索某些文件出一个ZIP文件的中间。

例如我有ZIP文件,其中包括700个文件夹(标记1〜700)。 每个文件夹都等于图片和MP3文件。 有一个叫信息特殊的文件夹,其中包含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++;
      }
    }
  }
}

Answer 1:

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

ZipFile file = ...
ZipEntry entry = file.getEntry("folder1/picture.jpg");
InputStream in = file.getInputStream(entry);


文章来源: Java most efficient way to retrieve something out of the middle of a ZIP
标签: java zip