当前位置: 代码迷 >> java >> ZipEntry 中的额外字节用于什么?
  详细解决方案

ZipEntry 中的额外字节用于什么?

热度:84   发布时间:2023-07-26 14:32:39.0

用于 Zip 文件的 Java 库在ZipEntry有一个用于的选项,该选项返回byte[]null ZipEntry 中的额外字节用于什么? 我知道关于链接到getExtra()存档属性的,但它没有解释该字段的其他用途。 此外,问题表明存储在额外字段中的某些内容无法从 Java 设置。

答案可以在的前两个链接中找到。

描述了基本的 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);
    }
}