java - 如何优化 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 或更高,它对大文件的压缩时间会更短吗?
解决方案
包装FileInputStream
inBufferedInputStream
和使用BufferedOutputStream
as target forZipOutputStream
应该可以提高性能。不要犹豫,将它们的缓冲区大小设置为 1 Mb。
第二种选择是通过ZipOutputStream.setLevel
方法播放压缩级别
推荐阅读
- c++ - 使用删除功能?
- javascript - 在新的谷歌网站中重定向表单
- java - Java - 用于设备控制的非阻塞 SocketChannel,通用方法
- p5.js - p5js中的动画PNG帧速率
- php - 如何更改 GoDaddy 中的名称服务器可能会在托管程序中托管
- jwt - 连接到 Revolut 沙箱
- flask - 我如何知道何时发送了 OIDC 身份验证重定向?
- c# - 如何从 C# MVC .net 核心中的用户名(身份名称)获取 Azure AD 用户组名称?
- zsh - iterm2 标签标题的变量是什么?
- excel - 如何解决 .save 上的 VBA 调试错误?