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
        • 📚简介
        • 🏗️核心结构
          • 1. 类定义
          • 2. 核心属性
        • 🔧 API说明
          • 1. 创建Deflate实例
          • of(InputStream source, OutputStream target, boolean nowrap)
          • 2. 压缩操作
          • deflater(int level)
          • 3. 解压缩操作
          • inflater()
          • 4. 资源关闭
          • close()
        • 🚀 使用示例
          • 1. DEFLATE压缩示例
          • 2. DEFLATE解压缩示例
          • 3. 链式调用示例
          • 4. 设置压缩级别的示例
          • 5. nowrap参数的使用示例
        • 🎯 设计优势
          • 1. 简洁易用的API
          • 2. 灵活的压缩级别
          • 3. nowrap模式支持
          • 4. 自动资源管理
          • 5. 异常处理优化
        • 📌 注意事项
          • 1. 流的关闭
          • 2. 压缩级别的选择
          • 3. nowrap参数的使用
          • 4. 性能考虑
          • 5. 与其他压缩格式的关系
        • 🔄 与传统JDK方式的对比
          • 1. 传统JDK方式(复杂)
          • 2. Hutool方式(简洁)
        • 📚 相关文档
      • ZIP读取器-ZipReader
      • ZIP写入器-ZipWriter
      • ZIP替换工具-ZipReplacer
      • ZIP资源-ZipResource
      • ZIP64支持-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
目录

DEFLATE工具-Deflate

# 📚简介

Deflate类是Hutool压缩模块中用于处理DEFLATE压缩算法的工具类,它对JDK的DeflaterOutputStream和InflaterOutputStream进行了封装,提供了更简洁易用的API,简化了DEFLATE压缩和解压缩操作。

DEFLATE是一种同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的无损数据压缩算法,广泛应用于ZIP、GZIP等压缩格式中。

# 🏗️核心结构

# 1. 类定义

public class Deflate implements Closeable {
    private final InputStream source;
    private OutputStream target;
    private final boolean nowrap;
    // ...
}

# 2. 核心属性

属性名 类型 描述
source InputStream 源流,用于读取原始数据或压缩数据
target OutputStream 目标流,用于写入压缩数据或解压缩后的数据
nowrap boolean 是否使用 nowrap 模式,true表示兼容Gzip压缩

# 🔧 API说明

# 1. 创建Deflate实例

# of(InputStream source, OutputStream target, boolean nowrap)

创建Deflate实例,用于后续的压缩或解压缩操作。

参数说明:

  • source:源流,可以是普通输入流或压缩输入流
  • target:目标流,可以是普通输出流或压缩输出流
  • nowrap:true表示兼容Gzip压缩,不添加ZIP文件头和尾

返回值:

  • Deflate实例,用于链式调用

# 2. 压缩操作

# deflater(int level)

将普通数据流压缩为DEFLATE格式。

参数说明:

  • level:压缩级别,取值范围0~9
    • 0:不压缩
    • 1:最快压缩
    • 9:最高压缩比
    • 默认:5

返回值:

  • Deflate实例,用于链式调用

实现逻辑:

  1. 如果目标流不是DeflaterOutputStream,则创建一个新的DeflaterOutputStream
  2. 设置指定的压缩级别
  3. 将源流的数据复制到目标流
  4. 调用finish()方法完成压缩
  5. 抛出IORuntimeException处理IO异常

# 3. 解压缩操作

# inflater()

将DEFLATE压缩流解压缩为普通数据流。

返回值:

  • Deflate实例,用于链式调用

实现逻辑:

  1. 如果目标流不是InflaterOutputStream,则创建一个新的InflaterOutputStream
  2. 将源流的数据复制到目标流
  3. 调用finish()方法完成解压缩
  4. 抛出IORuntimeException处理IO异常

# 4. 资源关闭

# close()

关闭所有流资源,实现了Closeable接口。

实现逻辑:

  • 静默关闭目标流和源流
  • 使用IoUtil.closeQuietly()方法确保资源安全关闭

# 🚀 使用示例

# 1. DEFLATE压缩示例

// DEFLATE压缩文件
try (InputStream in = FileUtil.getInputStream("source.txt");
     OutputStream out = FileUtil.getOutputStream("source.deflate")) {
    Deflate.of(in, out, false).deflater(5);
    Console.log("DEFLATE压缩完成!");
}

# 2. DEFLATE解压缩示例

// DEFLATE解压缩文件
try (InputStream in = FileUtil.getInputStream("source.deflate");
     OutputStream out = FileUtil.getOutputStream("source.txt")) {
    Deflate.of(in, out, false).inflater();
    Console.log("DEFLATE解压缩完成!");
}

# 3. 链式调用示例

// 创建Deflate实例并立即执行压缩
try (InputStream in = FileUtil.getInputStream("source.txt");
     OutputStream out = FileUtil.getOutputStream("source.deflate")) {
    Deflate.of(in, out, false).deflater(9).close();
    Console.log("DEFLATE最高级别压缩完成!");
}

# 4. 设置压缩级别的示例

// 测试不同压缩级别的效果
String sourceFile = "source.txt";
try (InputStream in = FileUtil.getInputStream(sourceFile)) {
    byte[] sourceData = IoUtil.readBytes(in);

    for (int level = 0; level <= 9; level++) {
        try (InputStream in2 = new ByteArrayInputStream(sourceData);
             ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            Deflate.of(in2, out, false).deflater(level);
            byte[] compressed = out.toByteArray();
            Console.log("压缩级别{} - 原始大小: {} 字节, 压缩后大小: {} 字节, 压缩率: {:.2f}%",
                      level, sourceData.length, compressed.length,
                      (1 - (double) compressed.length / sourceData.length) * 100);
        }
    }
}

# 5. nowrap参数的使用示例

// 使用nowrap=true创建兼容Gzip的DEFLATE压缩
try (InputStream in = FileUtil.getInputStream("source.txt");
     OutputStream out = FileUtil.getOutputStream("source.deflate");
     ByteArrayOutputStream gzipOut = new ByteArrayOutputStream()) {

    // 使用nowrap=true压缩
    Deflate.of(in, out, true).deflater(5);

    // 可以直接用Gzip解压缩
    try (InputStream deflateIn = FileUtil.getInputStream("source.deflate")) {
        Gzip.of(deflateIn, gzipOut).unGzip();
        Console.log("使用Gzip成功解压缩nowrap=true的DEFLATE数据!");
    }
}

# 🎯 设计优势

# 1. 简洁易用的API

  • 采用链式调用设计,代码更加简洁流畅
  • 封装了复杂的压缩级别设置和流处理逻辑
  • 统一的异常处理,避免了繁琐的try-catch代码

# 2. 灵活的压缩级别

  • 支持0~9级压缩级别设置
  • 可以根据实际需求在压缩速度和压缩比之间进行权衡
  • 提供默认压缩级别(5级),适合大多数场景

# 3. nowrap模式支持

  • 支持nowrap模式,兼容Gzip压缩格式
  • 可以灵活选择是否添加ZIP文件头和尾
  • 满足不同场景的压缩需求

# 4. 自动资源管理

  • 实现了Closeable接口,可以配合try-with-resources使用
  • 自动关闭流资源,避免资源泄漏
  • 静默关闭流,不会抛出额外异常

# 5. 异常处理优化

  • 将IOException转换为IORuntimeException,避免了受检异常的困扰
  • 统一的异常类型,便于上层代码处理
  • 提供了详细的异常信息,便于调试

# 📌 注意事项

# 1. 流的关闭

  • 建议使用try-with-resources语句管理Deflate实例,确保资源正确关闭
  • 如果不使用try-with-resources,需要手动调用close()方法

# 2. 压缩级别的选择

  • 压缩级别越高,压缩率越高,但压缩速度越慢
  • 压缩级别0表示不压缩,仅添加文件头和尾
  • 对于需要快速压缩的场景,建议使用1~3级
  • 对于需要高压缩比的场景,建议使用7~9级
  • 默认级别5适合大多数场景,平衡了压缩速度和压缩比

# 3. nowrap参数的使用

  • nowrap=true表示不添加ZIP文件头和尾,兼容Gzip格式
  • nowrap=false表示添加标准的ZIP文件头和尾
  • 如果需要与Gzip兼容,使用nowrap=true
  • 如果需要标准的DEFLATE格式,使用nowrap=false

# 4. 性能考虑

  • DEFLATE压缩会消耗一定的CPU资源,建议在后台线程中执行
  • 对于超大文件,建议使用流式处理,避免一次性加载到内存
  • 较高的压缩级别会消耗更多的CPU和内存资源

# 5. 与其他压缩格式的关系

  • DEFLATE是GZIP和ZIP格式的基础压缩算法
  • GZIP = DEFLATE + GZIP文件头和尾
  • ZIP = DEFLATE + ZIP文件头和尾
  • Deflate类提供了更底层的压缩控制

# 🔄 与传统JDK方式的对比

# 1. 传统JDK方式(复杂)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;

// 传统DEFLATE压缩方式
String sourceFile = "source.txt";
String targetFile = "source.deflate";
int compressionLevel = Deflater.BEST_COMPRESSION;

try (FileInputStream fis = new FileInputStream(sourceFile);
     DeflaterOutputStream dos = new DeflaterOutputStream(
         new FileOutputStream(targetFile),
         new Deflater(compressionLevel, false))) {

    byte[] buffer = new byte[1024];
    int len;
    while ((len = fis.read(buffer)) > 0) {
        dos.write(buffer, 0, len);
    }
    dos.finish();
    Console.log("DEFLATE压缩完成!");
} catch (IOException e) {
    e.printStackTrace();
}

# 2. Hutool方式(简洁)

import cn.hutool.v7.core.compress.Deflate;
import cn.hutool.v7.core.io.FileUtil;
import cn.hutool.v7.core.util.Console;

// Hutool DEFLATE压缩方式
String sourceFile = "source.txt";
String targetFile = "source.deflate";
int compressionLevel = 9; // 最高压缩级别

try (InputStream in = FileUtil.getInputStream(sourceFile);
     OutputStream out = FileUtil.getOutputStream(targetFile)) {
    Deflate.of(in, out, false).deflater(compressionLevel);
    Console.log("DEFLATE压缩完成!");
}

# 📚 相关文档

  • 压缩模块简介
  • ZIP工具-ZipUtil
  • GZIP工具-Gzip
  • ZIP读取器-ZipReader
GZIP工具-Gzip
ZIP读取器-ZipReader

← GZIP工具-Gzip ZIP读取器-ZipReader→

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