我有一个1-2GB的zip文件,其中包含500-1000k个条目。我需要在几分之一秒内按名称获取文件,而无需完全解压缩。如果文件存储在硬盘上,这将很好地工作:
public class ZipMapper {
private HashMap<String,ZipEntry> map;
private ZipFile zf;
public ZipMapper(File file) throws IOException {
map = new HashMap<>();
zf = new ZipFile(file);
Enumeration<? extends ZipEntry> en = zf.entries();
while(en.hasMoreElements()) {
ZipEntry ze = en.nextElement();
map.put(ze.getName(), ze);
}
}
public Node getNode(String key) throws IOException {
return Node.loadFromStream(zf.getInputStream(map.get(key)));
}
}
如果程序从Amazon S3下载了zip文件并拥有其InputStream(或字节数组),那么我该怎么办?尽管下载1GB只需要约1秒钟,但将其写入硬盘可能需要一些时间,并且处理多个文件略微困难,因为我们没有硬盘垃圾回收器。
ZipInputStream不允许随机访问条目。
创建一个通过字节数组在内存中的虚拟文件会很好,但我找不到方法。