用于 Zip 文件的 Java 库有一个选项ZipEntry
for getExtra()返回byte[]
or null
。 ZipEntry 中的额外字节有何用途?我知道这个问题关于链接到的存档属性getExtra()
但它没有解释该字段的其他用途。此外,问题表明存储在额外字段中的某些内容无法从 Java 设置。
答案可以在前两个链接中找到java.util.zip 包文档.
基本 zip 格式描述于PKWARE zip 规范。 4.5 和 4.6 节描述了额外数据是什么。
额外数据是一系列零个或多个块。每个块都以小端序 16 位 ID 开头,后跟紧随其后的小端序 16 位字节计数。
PKWARE 规范描述了一些众所周知的额外数据记录 ID。这信息压缩格式描述了更多。
因此,如果您想检查 zip 条目是否包含 ASi Unix Extra Field,您可以这样读:
ByteBuffer extraData = ByteBuffer.wrap(zipEntry.getExtra());
extraData.order(ByteOrder.LITTLE_ENDIAN);
while (extraData.hasRemaining()) {
int id = extraData.getShort() & 0xffff;
int length = extraData.getShort() & 0xffff;
if (id == 0x756e) {
int crc32 = extraData.getInt();
short permissions = extraData.getShort();
int linkLengthOrDeviceNumbers = extraData.getInt();
int userID = extraData.getChar();
int groupID = extraData.getChar();
ByteBuffer linkDestBuffer = extraData.slice().limit(length - 14);
String linkDestination =
StandardCharsets.UTF_8.decode(linkDestBuffer).toString();
// ...
} else {
extraData.position(extraData.position() + length);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)