当前位置: 首页 > 知识库问答 >
问题:

如何在更短的时间内解压缩大型zip文件&写入SDCARD

澹台硕
2023-03-14

为了解压缩zip文件,我使用了包java.util.zip*中的类,通过引用它,它可以正常工作,但是解压缩40MB的文件需要59秒。当我在iPhone project上尝试相同的zip文件(我们正在为Android和iPone这两个平台开发应用程序,它们具有解压缩zip文件并将解压缩的内容保存到SDCARD-Android或文档目录-iPhone的功能)时,只需要14秒。iphone应用程序使用了ziparchive。

2.我在谷歌上搜索过,stackoverflow&有些人建议使用minizip,但没有关于如何在Android中使用minizip的足够帮助。有没有人尝试过android的minizip?

3.为了达到我的目的,我也尝试了libz的NDK开发,因为libz是在NDK中添加的,但是没有得到如何使用它。在NDK有人试过libz吗?

4.在Java或C/C++中是否有其他框架可以在较短的时间内解压缩大的zip文件并将其写入SDCARD?

下面是我的Java解压缩码:

public String unzip() {

    String result;

    try {

        FileInputStream fin = new FileInputStream(this.filePath);
        ZipInputStream zin = new ZipInputStream(fin);
        ZipEntry ze = null;

        while ((ze = zin.getNextEntry()) != null) {

            Log.v("Unzip", "Unzipping " + ze.getName());

            if (ze.isDirectory()) {
                _dirChecker(ze.getName());
            } else {

                // Read 16 k at a time 
                byte[] buffer = new byte[16*1024];
                 int read;

                FileOutputStream fout = new FileOutputStream(this.location+ "/" + ze.getName());

                while ((read = zin.read(buffer)) != -1)
                {
                    fout.write(buffer, 0, read);
                }


                zin.closeEntry();
                fout.close();
            }

        }

        zin.close();
        result = "success";

    } catch (Exception e) {
        Log.e("unzip", "unzip", e);
        result = "failure";
    }

    return result;
}

共有1个答案

翟淮晨
2023-03-14

你为什么不试试这个代码,它很好用

    String zipname = "data.zip";
FileInputStream fis = new FileInputStream(zipname);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;

while ((entry = zis.getNextEntry()) != null) {
  System.out.println("Unzipping: " + entry.getName());

  int size;
  byte[] buffer = new byte[2048];

  FileOutputStream fos = new FileOutputStream(entry.getName());
  BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length);

  while ((size = zis.read(buffer, 0, buffer.length)) != -1) {
    bos.write(buffer, 0, size);
  }
  bos.flush();
  bos.close();
}
zis.close();
fis.close();

}

 类似资料:
  • 我有多个zip文件在一个文件夹和另一个zip文件存在于每一个这些zip文件夹。我想解压第一个和第二个zip文件夹,并创建它们自己的目录。 这是结构 如上所示,在中,我们有多个zip文件,在每个zip文件中,都存在另一个zip文件。我想解压缩,,和到新的文件夹中。我想使用与父zip文件夹相同的名称来放置每个结果。我尝试了以下答案,但这只解压缩第一个文件夹。 顺便说一句,我在Jenkins管道中运行这

  • 本文向大家介绍Python压缩解压缩zip文件及破解zip文件密码的方法,包括了Python压缩解压缩zip文件及破解zip文件密码的方法的使用技巧和注意事项,需要的朋友参考一下 python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件。 例如,在py脚本所在目录中,有如下文件: 将 readability 目录中的文件压缩到脚本所在目录的 readability.zip

  • 问题内容: 我想从互联网上下载一个zip文件,然后将其解压缩到内存中而不保存到临时文件中。我怎样才能做到这一点? 这是我尝试过的: [编辑]就像我建议的那样,我尝试使用adm-zip库,但仍然无法完成这项工作: 问题答案: 您需要一个可以处理缓冲区的库。最新版本将: 我的解决方案使用该方法,因为它返回Buffer块。 码: 这个想法是创建一个缓冲区数组,并在最后将它们连接成一个新的缓冲区。这是因为

  • 问题内容: 我正在下载包含XML的压缩文件,由于延迟要求,我希望避免在操作之前将zip文件写入磁盘。但是,这不足以满足我的需求。没有办法说“这是一个zip文件的字节数组,请使用它”而不将其转换为流,并且它不可靠,因为它会扫描条目标头(请参阅EDIT下面的讨论,以了解为什么它不可靠)。 我尚无法访问要处理的zip文件,因此我不知道我是否能够通过来处理它们,因此我需要找到一种适用于任何有效ZIP文件的

  • 写压缩文件 # gzip_write.py import gzip import io import os outfilename = 'example.txt.gz' with gzip.open(outfilename, 'wb') as output: with io.TextIOWrapper(output, encoding='utf-8') as enc: e