当前位置:首页 > Java

java如何压缩字节

2026-03-25 00:13:50Java

使用 Deflater 类压缩字节

Java 提供了 java.util.zip.Deflater 类用于压缩字节数据。以下是一个示例代码:

import java.util.zip.Deflater;

public class ByteCompressor {
    public static byte[] compress(byte[] input) {
        Deflater deflater = new Deflater();
        deflater.setInput(input);
        deflater.finish();

        byte[] buffer = new byte[input.length];
        int compressedLength = deflater.deflate(buffer);
        byte[] output = new byte[compressedLength];
        System.arraycopy(buffer, 0, output, 0, compressedLength);
        return output;
    }
}

使用 Inflater 类解压缩字节

解压缩可以使用 java.util.zip.Inflater 类:

import java.util.zip.Inflater;

public class ByteDecompressor {
    public static byte[] decompress(byte[] input) {
        Inflater inflater = new Inflater();
        inflater.setInput(input);

        byte[] buffer = new byte[1024];
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            while (!inflater.finished()) {
                int count = inflater.inflate(buffer);
                outputStream.write(buffer, 0, count);
            }
        } catch (DataFormatException e) {
            e.printStackTrace();
        }
        return outputStream.toByteArray();
    }
}

使用 GZIPOutputStreamGZIPInputStream

对于简单的 GZIP 格式压缩:

import java.io.*;
import java.util.zip.GZIPOutputStream;
import java.util.zip.GZIPInputStream;

public class GzipCompressor {
    public static byte[] compress(byte[] input) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try (GZIPOutputStream gzip = new GZIPOutputStream(bos)) {
            gzip.write(input);
        }
        return bos.toByteArray();
    }

    public static byte[] decompress(byte[] input) throws IOException {
        ByteArrayInputStream bis = new ByteArrayInputStream(input);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try (GZIPInputStream gzip = new GZIPInputStream(bis)) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = gzip.read(buffer)) > 0) {
                bos.write(buffer, 0, len);
            }
        }
        return bos.toByteArray();
    }
}

使用 Apache Commons Compress 库

如果需要更高级的压缩算法(如 LZ4、Brotli 等),可以使用 Apache Commons Compress:

java如何压缩字节

import org.apache.commons.compress.compressors.lz4.FramedLZ4CompressorOutputStream;
import org.apache.commons.compress.compressors.lz4.FramedLZ4CompressorInputStream;

public class LZ4Compressor {
    public static byte[] compress(byte[] input) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try (FramedLZ4CompressorOutputStream lz4 = new FramedLZ4CompressorOutputStream(bos)) {
            lz4.write(input);
        }
        return bos.toByteArray();
    }

    public static byte[] decompress(byte[] input) throws IOException {
        ByteArrayInputStream bis = new ByteArrayInputStream(input);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try (FramedLZ4CompressorInputStream lz4 = new FramedLZ4CompressorInputStream(bis)) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = lz4.read(buffer)) > 0) {
                bos.write(buffer, 0, len);
            }
        }
        return bos.toByteArray();
    }
}

注意事项

  • 压缩小数据可能会产生比原始数据更大的结果,因为压缩算法有头部信息。
  • 选择合适的压缩级别(DeflatersetLevel 方法)可以平衡压缩率和速度。
  • 处理大文件时,建议使用流式处理而不是一次性读取全部内容到内存。

以上方法可以根据具体需求选择使用,内置的 DeflaterGZIP 适用于大多数场景,而第三方库如 Apache Commons Compress 提供了更多算法选择。

标签: 字节java
分享给朋友:

相关文章

java如何学习

java如何学习

学习Java的有效方法 理解基础概念 Java是一门面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制语句(if-else、循环)是必要的。面向对象的核心概念包括类、对象、继承、多态和封装…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…

java如何取绝对值

java如何取绝对值

取绝对值的方法 在Java中,取绝对值可以通过以下几种方式实现: 使用Math.abs()方法 Math.abs()是Java中最常用的取绝对值方法,适用于多种数据类型: int absolute…

php 实现 java md5

php 实现 java md5

在 PHP 中实现与 Java 相同的 MD5 哈希算法,关键在于确保编码和输出格式的一致性。以下是具体实现方法和注意事项: 确保字符串编码一致 Java 的 String.getBytes() 默…

php 实现java md5加密

php 实现java md5加密

PHP 实现 Java MD5 加密的兼容方法 Java 和 PHP 的 MD5 加密结果可能存在差异,主要因字符编码或输出格式不同。以下是确保两者结果一致的方法: 使用 hash 函数并处理编码…

java如何

java如何

以下是针对Java常见需求的解决方案整理,以模块化方式呈现: 基础环境配置 下载JDK并配置环境变量,官网提供最新版本。验证安装使用命令 java -version。IDE推荐IntelliJ ID…