解决java.util.zip.ZipException: Not in GZIP format报错问题

 更新时间:2023年12月21日 10:18:11   作者:李治鸿  
这篇文章主要介绍了解决java.util.zip.ZipException: Not in GZIP format报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java.util.zip.ZipException: Not in GZIP format报错

最近在对接第三方接口时遇到了一个报错,java.util.zip.ZipException: Not in GZIP format,因为公司在推行使用GPT提高开发效率,所以我遇事不决先问GPT

GPT给我的答案

java.util.zip.ZipException: Not in GZIP format 的报错一般是由以下几个原因导致的:

> 1. 压缩文件格式不正确。也就是说,你试图解压一个不是GZIP格式的文件。确保要解压的文件确实使用GZIP格式进行压缩。

> 2. 文件内容已损坏。有可能压缩时引入了错误,或在传输过程中文件被篡改了。导致文件内容已经损坏,无法正常解压。

> 3. 编码格式不匹配。GZIP格式只支持部分编码,如果压缩时使用了不支持的编码,也可能导致解压失败。

> 4. Java 版本不匹配。GZIP格式在不同的Java版本中实现可能有差异,如果压缩时使用的是另一个Java版本,也可能解压失败。

> 5. 代码存在bug。你的解压代码可能存在bug,导致无法正常读取GZIP格式。可以对比官方实现,检查代码是否存在问题。

为了解决这个报错,你可以分别检查以下几点:

> 1. 检查原压缩文件的确使用GZIP格式。如使用zip -d查看压缩格式。

> 2. 使用文件校验器 检查压缩文件是否被篡改。

> 3. 在解压前使用工具来检查文件是否损坏。

> 4. 检查压缩和解压所用的编码格式是否一致。

> 5. 验证压缩和解压所用的Java版本是否匹配。

> 6. 对比官方GZIP解压缩代码,检查你的解压缩代码是否存在bug。

> 7. 将原压缩文件解压后再重新压缩,看是否仍然报该错。来排查是否是文件本身的问题。 除此之外,还可以尝试使用其他GZIP库来解压,或者直接用 unzip命令,看是否仍然报同样的错误。这可以排除代码方面的问题。

嗯,说了一大堆有用的废话,还是自己打断点吧。

很快啊,我定位到封装了发送http请求的方法中,在其中有一个解析相应数据的方法EntityUtils.toString(response.getEntity(), "utf-8");

因为本人阅读源码的能力不强,在这就不赘述底层逻辑了,总之就是这行报错了,一开始觉得是我请求头的问题,改了又改,无果,通过各种套路GPT得到了以下回答:

>   问:如果响应头中缺少Content-Encoding会导致Not in GZIP format报错吗

>   答:是的。如果响应主体确实使用了gzip编码,但响应头却缺少Content-Encoding字段,这很容易导致Not in GZIP format的错误。 具体的原因是: 由于缺少Content-Encoding字段,客户端不知道响应使用了gzip编码。

> 尝试使用gzip解码器解码主体内容时,会发现内容并非有效的gzip编码格式,就报Not in GZIP format的错误。

> 所以如果响应确实使用了gzip编码,Content-Encoding字段就非常重要:

> - 没有Content-Encoding字段,客户端无法意识到响应使用了gzip编码

> - 尝试使用gzip解码器解码主体内容时,会报Not in GZIP format错误 相反,如果响应主体内容没有使用gzip编码,那么缺少Content-Encoding字段就不会报这个错。

> 所以,为了解决这个问题,关键在于确保:

> 1. 响应主体是否确实使用了gzip编码

> 2. 响应头正确加入Content-Encoding: gzip字段

> 3. 然后使用gzip解码器来解码主体内容 只有响应主体确实使用gzip编码、但响应头又缺少Content-Encoding字段的情况下, 才会导致Not in GZIP format错误。 只有当响应真正不是gzip编码的时候,这个错误才不会出现。

通过它的解答,我开始怀疑是对接方的问题,于是乎,第二天上班找到对面负责人进行礼貌问候,不出五分钟,真的非常快,那边答复:好了

我(已黑化):啊?

白加班了。。。

由于是小公司没什么话语权,对接方还是上游,所以没有仔细问原因,但是我觉得大概率是响应头的问题,如果大家有别的看法可以学术讨论下。

其实这次问题并没有涉及到什么技术问题,只是沟通存在问题,这种情况我在开发时也遇到很多次了,所以写代码的同时也要注意及时沟通,遇到不明白的问题问同事,问对接方,自己闷着是解决不了问题的,问问问,问到明白为止、问到问题解决为止。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于String.format()格式化输出方式

    关于String.format()格式化输出方式

    String.format()是Java的格式化输出方法,支持多种数据类型和格式化选项,它在格式化和拼接字符串时具有较高的灵活性,但效率相对较低,特别是在处理大量数据时,在实际编程中,应根据具体需求选择合适的字符串拼接方式
    2024-12-12
  • java 工作流引擎设计实现解析流程定义文件

    java 工作流引擎设计实现解析流程定义文件

    这篇文章主要为大家介绍了java 工作流引擎设计与实现及流程定义文件解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • springboot实现string转json json里面带数组

    springboot实现string转json json里面带数组

    这篇文章主要介绍了springboot实现string转json json里面带数组,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • SpringBoot实现实时弹幕的示例代码

    SpringBoot实现实时弹幕的示例代码

    实时弹幕系统已成为现代视频网站和直播平台的标准功能,它让观众可以在观看视频时发送即时评论,本文将介绍如何使用SpringBoot构建一个实时弹幕系统,需要的可以了解下
    2025-06-06
  • 解决Spring Cloud feign GET请求无法用实体传参的问题

    解决Spring Cloud feign GET请求无法用实体传参的问题

    这篇文章主要介绍了解决Spring Cloud feign GET请求无法用实体传参的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Java线程的新建和就绪状态实例分析

    Java线程的新建和就绪状态实例分析

    这篇文章主要介绍了Java线程的新建和就绪状态,结合实例形式分析了java线程的创建、调用等相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • Java解压和压缩带密码的zip文件过程详解

    Java解压和压缩带密码的zip文件过程详解

    这篇文章主要介绍了Java解压和压缩带密码的zip文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来学习一下吧
    2019-06-06
  • Java汉字转换拼音(大小写)实例详解

    Java汉字转换拼音(大小写)实例详解

    这篇文章主要给大家介绍了关于Java汉字转换拼音(大小写)的相关资料,包括使用java.text.Normalizer类和正则表达式进行大小写转换,通过示例代码和场景说明,帮助读者在实际项目中实现汉字与拼音的转换,需要的朋友可以参考下
    2025-05-05
  • SpringBoot利用dag加速Spring beans初始化的方法示例

    SpringBoot利用dag加速Spring beans初始化的方法示例

    本文介绍了利用DAG加速SpringBoot中Spring beans初始化,先解释了DAG 概念及特性,包括节点入度出度、拓扑排序等,接着阐述加速Spring Bean初始化的实现思路,如识别依赖关系构建DAG、拓扑排序、并行初始化Bean及与Spring集成,还展示了相关代码工程、测试结果及引用
    2024-12-12
  • 如何理解和运用ClassLoader

    如何理解和运用ClassLoader

    这篇文章主要介绍了如何理解和运用 ClassLoader,帮助大家更好的理解和使用JVM,感兴趣的朋友可以了解下
    2021-01-01

最新评论