2

是否有任何 Java 库通过查找中央目录记录的结尾并使用它来定位中央目录记录,然后是本地文件条目(本地文件头和本地文件数据)来实现读取 ZIP 存档所需的算法,而不做输入输出?

如果需要,请参阅ZIP 规范以了解此类字段的定义。

从中央目录末尾读取的原因是能够正确解压缩文件,例如自解压文件(参见Winzip 自解压器示例),这些文件在实际 ZIP 内容之前有数据,其中可能包含等于现有的字节序列ZIP 标头的签名。

“不进行 I/O”是指 ZIP 内容以字节数组的形式存在,不应使用磁盘或网络访问来解压缩它。

4

2 回答 2

2

您可以使用 aByteArrayInputStream来读取字节数组,就像从文件中读取一样。

byte[] zipData = . . .
ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(zipData));

编辑

由于标准ZipFile实现使用本机代码,因此不能与ByteArrayInputStream. 但是,您可能能够适应ZipFile. 一个起点是Android 实现。它并没有完全完成这项工作,因为它使用RandomAccessFile. 但是,使用这个线程中的想法来构建内存版本RandomAccessFile,您可能能够将您需要的所有内容拼凑起来。

于 2012-10-03T00:03:34.513 回答
0

我们的 SecureBlackbox 包括使用内存流操作的ZIP 组件。我想这正是您正在寻找的。

于 2012-10-03T06:35:17.153 回答