首页 > 解决方案 > 如何优化 zip 压缩时间

问题描述

我有这个 zipUtil

private void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
        if (fileToZip.isHidden()) {
            return;
        }
        if (fileToZip.isDirectory()) {
            if (fileName.endsWith("/")) {
                zipOut.putNextEntry(new ZipEntry(fileName));
                zipOut.closeEntry();
            } else {
                zipOut.putNextEntry(new ZipEntry(fileName + "/"));
                zipOut.closeEntry();
            }
            File[] children = fileToZip.listFiles();
            for (File childFile : children != null ? children : new File[0]) {
                zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
            }
            return;
        }
        FileInputStream fis = new FileInputStream(fileToZip);
        ZipEntry zipEntry = new ZipEntry(fileName);
        zipOut.putNextEntry(zipEntry);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }
        fis.close();
    }

我用来压缩大文件/文件夹,但它需要很多大尺寸,有没有办法优化它?增加字节数组可能吗?如果我设置 4096 或更高,它对大文件的压缩时间会更短吗?

标签: java

解决方案


包装FileInputStreaminBufferedInputStream和使用BufferedOutputStreamas target forZipOutputStream应该可以提高性能。不要犹豫,将它们的缓冲区大小设置为 1 Mb。

第二种选择是通过ZipOutputStream.setLevel方法播放压缩级别


推荐阅读