提取大量的拉链

时间:2011-07-03 08:58:23

标签: java android unzip

我有一大堆(说1000张)可变尺寸的拉链(从4k到400k说),拉链条目。我设法以经典的方式解压缩所有内容,但性能并不令人满意...你知道一种不同的方式,nio或本机可以帮助提高性能吗?

提前谢谢。

抱歉..我忘了发帖代码:)

    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();

1 个答案:

答案 0 :(得分:2)

您的代码看起来不错....

在Android上解压缩会很慢。这是相对较低的CPU速度(对于这种类型的操作,ARM肯定比x86差)和SD卡接口的速度(记住你们都在阅读.zip和使用相同的相对低速文件系统编写解压缩的数据) - 未压缩的数据可能比压缩数据多几倍,因此我们在谈论相当多的写入。

除了解决方法之外,你可以做很多事情:

  • 尽可能进行流处理 - 在极少数情况下,它可能比预先解压缩整个文件更快(例如,如果你只想从zip访问少量文件)
  • 根据需要解压缩文件 - 懒惰,在后台...通常 - 你可能会给用户一些视觉反馈,让她做一些东西,而你的拉链在后台解压缩(记得低优先考虑线程,可能暂停甚至暂停。