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

InputStream转换为JSONElement时抛出异常,如何解决?

问题分析与解决方案

错误根源

你看到的\u001f?\b\u000\u000\u0004\u0003uT是GZIP压缩数据流的头部标识,输入流是经过GZIP压缩的,不是明文JSON,直接用InputStreamReader读取解析自然会失败,和编码设置无关。

修正后的代码

先通过GZIPInputStream解压缩输入流,再进行JSON解析:

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;

public JsonElement parseJsonContentFromStream(InputStream in) throws Exception {
    // 先解压缩输入流,再读取解析
    try (GZIPInputStream gzipIn = new GZIPInputStream(in);
         InputStreamReader isr = new InputStreamReader(gzipIn, StandardCharsets.UTF_8);
         BufferedReader bufferedReader = new BufferedReader(isr)) {
        JsonParser parser = new JsonParser();
        return parser.parse(bufferedReader);
    }
}

补充说明

  1. 代码使用try-with-resources语法自动关闭流,避免资源泄漏
  2. 若输入流是其他压缩格式(如Deflate),需替换为对应解压流
  3. 可通过检测流的前两个字节(GZIP魔数为0x1F8B),动态判断是否需要解压

内容的提问来源于stack exchange,提问作者Reach Loki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:09:24