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

为何使用GZIPOutputStream压缩的结果与在线Gzip工具输出不一致?

问题原因及解决方法

你的代码和在线Gzip转换器输出差异的核心原因是数据编码方式不同:

  • 你的代码:直接将GZIP压缩生成的二进制字节数组转换成普通字符串。但压缩后的二进制数据包含大量非可打印的ASCII字符,这些字符无法被正常显示,所以输出呈现为乱码(那些奇怪的符号)。
  • 在线工具:会自动将GZIP压缩后的二进制字节做Base64编码——把二进制数据转换成由可打印字符(A-Z、a-z、0-9、+、/)组成的字符串,这种格式更便于文本场景下的传输和展示,所以得到的是eJwLSS0uUQguKcrMSwcAGKAEOA==这类结果。

如果想让你的代码输出和在线工具一致,只需要在压缩后对字节数组做Base64编码即可,修正后的代码如下:

private static final String TEST_STRING = "Test String";

public static void main(String[] args) throws IOException {
    System.out.println("Original data: " + TEST_STRING);
    String compressedString = compress(TEST_STRING);
    System.out.println("Compressed data (Base64): " + compressedString);
}

private static String compress(String str) {
    byte[] byteArray = str.getBytes();
    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
        gzipOutputStream.write(byteArray);
    } catch (IOException e) {
        System.out.println("Exception occurred during compressing: " + e);
    }
    // 对压缩后的二进制字节做Base64编码
    return Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());
}

运行这段代码后,输出的压缩结果就会和在线工具的Base64格式完全匹配。

内容的提问来源于stack exchange,提问作者V John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:09