我想在解压缩之前检查 future 未压缩文件的大小。有人可以确认该库不是通过解压缩内存中的文件来获取其最终未压缩大小来启动的吗?
我的代码:
import java.io.*;
import java.util.Enumeration;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
public class ZipGetMethod {
public static void main(String[] args) {
String file = "file.zip";
try {
ZipFile zipfile = new ZipFile(file);
Enumeration e = zipfile.entries();
while (e.hasMoreElements()) {
ZipEntry zipentry = (ZipEntry) e.nextElement();
String entryName = zipentry.getName();
Date lastModify = new Date(zipentry.getTime());
long uncomSize = zipentry.getSize();
long comSize = zipentry.getCompressedSize();
} catch (IOException ex) {
System.out.println("IOException is : " + ex);
}
}
}
最佳答案
ZIP 格式将未压缩的文件大小存储为中心目录 ( http://en.wikipedia.org/wiki/Zip_%28file_format%29#Structure ) 的一部分,无需处理实际的压缩数据来确定文件大小。
现在,关于您正在使用的 Java 实现,取决于平台,但很可能它不会处理文件数据或本地 header ,并且将引用中央目录(或各个中央目录,如果 zip 文件有已附加数据)。
快速查看 OpenJDK 实现 ( http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/zip/ZipEntry.java#ZipEntry.getSize%28%29 ) 表明 ZipEntry 加载了来自 ZIP 目录的文件大小数据,并且 getSize()
只是返回该值,而无需进一步检查压缩文件数据。
关于java - 当我们调用函数ZipEntry.getSize时,库是否首先在内存中解压缩文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26124017/