ZipEntry 中的额外字节有何用途?

2023-11-30

用于 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(使用前将#替换为@)

ZipEntry 中的额外字节有何用途? 的相关文章

随机推荐