Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

      • 简介
      • ZIP工具-ZipUtil
      • GZIP工具-Gzip
      • DEFLATE工具-Deflate
      • ZIP读取器-ZipReader
      • ZIP写入器-ZipWriter
      • ZIP替换工具-ZipReplacer
      • ZIP资源-ZipResource
      • ZIP64支持-Zip64
        • 📚简介
        • 🏗️核心结构
          • 1. 类定义
          • 2. 核心常量
          • 3. 内部类 Entry
        • 🔧 API说明
          • 1. 构造方法
          • Zip64(OutputStream out)
          • 2. 核心方法
          • writeLFH(Entry entry)
          • writeDAT(Entry entry)
          • writeCEN(Entry entry)
          • writeEND(int entriesCount, int offset, int length)
          • 3. 辅助方法
          • writeShort(int v)
          • writeInt(long v)
          • writeLong(long v)
        • 🎯 设计优势
          • 1. 支持大文件处理
          • 2. Excel兼容
          • 3. 高效的实现
          • 4. 完整的ZIP格式支持
        • 📌 注意事项
          • 1. 包可见性
          • 2. 输出流管理
          • 3. 数据完整性
          • 4. 兼容性考虑
        • 🔄 与传统ZIP实现的对比
          • 1. 传统ZIP实现的限制
          • 2. Zip64实现的优势
        • 📚 相关文档
    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 压缩(compress)
Hutool
2026-01-15
目录

ZIP64支持-Zip64

# 📚简介

Zip64是Hutool压缩模块中用于支持Excel兼容的Zip64实现的类。它主要用于处理大文件的ZIP压缩,特别是针对Excel文件的兼容处理。该类来自于rzymek/opczip (opens new window)项目,提供了对Zip64格式的支持,允许处理超过4GB的大文件和超过65535个条目的ZIP文件。

# 🏗️核心结构

# 1. 类定义

class Zip64 {
    private static final long PK0102 = 0x02014b50L;
    private static final long PK0304 = 0x04034b50L;
    private static final long PK0506 = 0x06054b50L;
    private static final long PK0708 = 0x08074b50L;

    private static final int VERSION_20 = 20;
    private static final int VERSION_45 = 45;
    private static final int DATA_DESCRIPTOR_USED = 0x08;
    private static final int ZIP64_FIELD = 0x0001;
    private static final long MAX32 = 0xffffffffL;

    private final OutputStream out;
    private int written = 0;

    // Entry内部类
    static class Entry {
        final String filename;
        long crc;
        long size;
        int compressedSize;
        int offset;
        // ...
    }

    // 构造方法和其他方法
    // ...
}

# 2. 核心常量

常量名 值 描述
PK0102 0x02014b50L ZIP文件中央目录文件头签名
PK0304 0x04034b50L ZIP文件本地文件头签名
PK0506 0x06054b50L ZIP文件中央目录结束签名
PK0708 0x08074b50L ZIP文件数据描述符签名
VERSION_20 20 ZIP版本2.0
VERSION_45 45 ZIP版本4.5,支持Zip64
DATA_DESCRIPTOR_USED 0x08 标记使用数据描述符
ZIP64_FIELD 0x0001 Zip64字段标记
MAX32 0xffffffffL 32位最大整数值,超过此值需要Zip64支持

# 3. 内部类 Entry

Entry类用于表示ZIP文件中的一个条目,包含以下字段:

字段名 类型 描述
filename String 文件名
crc long CRC32校验值
size long 未压缩大小
compressedSize int 压缩大小
offset int 本地文件头偏移量

# 🔧 API说明

# 1. 构造方法

# Zip64(OutputStream out)

创建Zip64实例,用于写入ZIP文件。

参数说明:

  • out:输出流,用于写入ZIP数据

# 2. 核心方法

# writeLFH(Entry entry)

写入本地文件头(Local File Header)。

参数说明:

  • entry:ZIP条目对象

返回值:

  • 写入的字节数

异常:

  • IOException:IO异常

# writeDAT(Entry entry)

写入数据描述符(Data Descriptor)。

参数说明:

  • entry:ZIP条目对象

返回值:

  • 写入的字节数

异常:

  • IOException:IO异常

# writeCEN(Entry entry)

写入中央目录文件头(Central Directory Entry)。

参数说明:

  • entry:ZIP条目对象

返回值:

  • 写入的字节数

异常:

  • IOException:IO异常

实现逻辑:

  1. 检查条目大小是否超过32位最大值
  2. 如果超过,启用Zip64字段
  3. 写入中央目录文件头
  4. 如果启用了Zip64,写入额外的Zip64字段

# writeEND(int entriesCount, int offset, int length)

写入中央目录结束记录(End of Central Directory Record)。

参数说明:

  • entriesCount:条目数量
  • offset:中央目录偏移量
  • length:中央目录长度

返回值:

  • 写入的字节数

异常:

  • IOException:IO异常

# 3. 辅助方法

# writeShort(int v)

以小端字节序写入16位短整数。

# writeInt(long v)

以小端字节序写入32位整数。

# writeLong(long v)

以小端字节序写入64位长整数。

# 🎯 设计优势

# 1. 支持大文件处理

  • 支持超过4GB的大文件压缩
  • 支持超过65535个条目的ZIP文件
  • 解决了传统ZIP格式的32位限制

# 2. Excel兼容

  • 专门为Excel文件设计的Zip64实现
  • 确保生成的ZIP文件能够被Excel正确识别
  • 兼容各种Excel版本

# 3. 高效的实现

  • 直接操作底层输出流,减少内存占用
  • 小端字节序写入,符合ZIP格式规范
  • 优化的写入逻辑,提高性能

# 4. 完整的ZIP格式支持

  • 支持本地文件头、数据描述符、中央目录文件头和中央目录结束记录
  • 正确处理Zip64扩展字段
  • 符合ZIP文件格式规范

# 📌 注意事项

# 1. 包可见性

  • Zip64类是包级可见的,外部无法直接访问
  • 主要供Hutool内部的压缩模块使用
  • 不建议外部直接使用该类

# 2. 输出流管理

  • 不负责关闭传入的输出流
  • 使用完毕后需要手动关闭输出流
  • 建议使用try-with-resources语句管理输出流

# 3. 数据完整性

  • 依赖外部计算CRC32值和文件大小
  • 确保传入的Entry对象包含正确的CRC32值和大小信息
  • 否则可能导致生成的ZIP文件损坏

# 4. 兼容性考虑

  • 主要针对Excel文件进行了优化
  • 对于其他类型的ZIP文件,可能不是最优选择
  • 建议根据实际需求选择合适的ZIP实现

# 🔄 与传统ZIP实现的对比

# 1. 传统ZIP实现的限制

  • 单个文件大小不能超过4GB
  • 整个ZIP文件大小不能超过4GB
  • 最多只能包含65535个条目
  • 不支持Zip64扩展字段

# 2. Zip64实现的优势

  • 支持单个文件大小超过4GB
  • 支持整个ZIP文件大小超过4GB
  • 支持超过65535个条目
  • 正确处理Zip64扩展字段
  • Excel兼容,确保生成的ZIP文件能被Excel正确识别

# 📚 相关文档

  • 压缩模块简介
  • ZIP工具-ZipUtil
  • ZIP写入器-ZipWriter
ZIP资源-ZipResource
简介

← ZIP资源-ZipResource 简介→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式