You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java从字符串提取GZIP值解压时报Not in GZIP format错误如何解决

问题解决:GZIP解压字符串抛出Not in GZIP format错误

你遇到的报错根本原因是:compressed_value属性存储的是Base64编码后的GZIP压缩字节串,并非直接的GZIP字节流对应的字符串。你当前代码直接调用compressedValue.getBytes()获取的是Base64文本本身的字节,不符合GZIP格式规范,因此抛出异常。

解决步骤如下:

  • 第一步:先对compressed_value做Base64解码,得到原始的GZIP压缩字节数组
  • 第二步:将解码后的字节数组传入GZIPInputStream执行解压流程

Java 8及以上版本内置java.util.Base64工具类,无需引入第三方依赖,修正后的示例代码如下:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.zip.GZIPInputStream;

public class Main {
    public static void main(String[] args) throws IOException {
        String compressedValue = "H4sIAAAAAAAA/wtOzC3ISVUoSa0oUSjJSCxRyFRITswrUUhJLU4tykzMyaxK1VFISczLVQQAkIb0eioAAAA=";

        try {
            final int BUFFER_SIZE = 32;
            // 新增Base64解码步骤,获取原始GZIP压缩字节
            byte[] gzipBytes = Base64.getDecoder().decode(compressedValue);
            ByteArrayInputStream is = new ByteArrayInputStream(gzipBytes);
            GZIPInputStream gis = new GZIPInputStream(is);
            byte[] data = new byte[BUFFER_SIZE];
            int bytesRead;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((bytesRead = gis.read(data)) != -1) {
                baos.write(data, 0, bytesRead);
            }
            gis.close();
            is.close();
            baos.close();
            System.out.println(baos.toString("UTF-8"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

如果你使用的是低于Java 8的版本,可以使用Apache Commons Codec的org.apache.commons.codec.binary.Base64类完成解码逻辑,API用法基本一致。


内容的提问来源于stack exchange,提问作者Clovis Ignacio Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:24:08