gpt4 book ai didi

java - 如何在 Java 中找到 ZipFile 条目的文件偏移量?

转载 作者:行者123 更新时间:2023-11-30 09:46:39 25 4
gpt4 key购买 nike

我有一个 ZipFile,我想创建一个数组,其中包含每个条目的偏移量/大小。这样 C++ 层 (JNI) 就可以直接读取这些子文件而无需提取它们。

我可以使用 entry.getCompressedSize() 获取文件的压缩大小,但我没有看到任何东西来找出文件在 zip 中的偏移量。

Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
while (zipEntries.hasMoreElements())
{
ZipEntry zip = (ZipEntry)zipEntries.nextElement();
//long offset = ?
long fileSize = zip.getCompressedSize();
}

有什么简单的方法可以得到这个吗?

最佳答案

我读到条目由 .entries() 以它们在文件中出现的确切顺序返回(不确定这是指实际文件还是标题条目。)假设是这种情况,以下解决了问题:

Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
long offset = 0;
while (zipEntries.hasMoreElements())
{
ZipEntry entry = (ZipEntry)zipEntries.nextElement();
long fileSize = 0;
long extra = entry.getExtra() == null ? 0 : entry.getExtra().length;
offset += 30 + entry.getName().length() + extra;
if(!entry.isDirectory())
{
fileSize = entry.getCompressedSize();

// Do stuff here with fileSize & offset
}
offset += fileSize;
}

这适用于我的情况。唯一需要注意的是,根据 ZIP 压缩规范,并不是所有 zip 文件中的文件存储顺序都与目录中的顺序完全相同。因为在我的例子中,我可以控制 zip 文件的构造,所以这不是问题,但如果您使用来自不受控制的源的 zip,这种方法可能不起作用。

关于java - 如何在 Java 中找到 ZipFile 条目的文件偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com