关于java.util.zip.ZipException: Corrupt GZIP trailer异常?

新手上路,请多包涵

版本环境

docker-Alpine Linux 3.15-JDK11

问题描述

应用程序会通过GZIPInputstream类读取一个压缩文件、 在两个相同的docker环境部署、 java环境压缩文件等都验证一致、 在一个环境就会报上述的异常错误

问题分析

  1. GZIPInputstream类read函数会循环读取文件内容直到文件结尾、即read返回-1、 然后会调用readTrailer函数
  2. 报错异常就是调用readTrailer函数、此函数会比较已经读取文件内容的crc以及文件尾部读取的crc、不等就会抛出异常、crc用的java.util.zip.CRC32
  3. 通过jdb调试发现、 read函数会调用1000多次、 每次读取文件内容后都会更新crc值、 只有在最后一次update时crc会不一致、其他都是一样的
  4. 通过watch java.util.zip.CRC32.crc值、 也只是在updateBytes(update crc调用的)函数更新、 该函数会调用native函数updateBytes0、 观察函数updateBytes传给updateBytes0的参数也是一致的、

疑问

现在就是所有环境都一致、为什么会存在调用相同的函数参数一致返回不一致的情况、 jdk一致的话native函数实现应该也一致吧。这里我没有看、 请各位大佬帮忙解答下疑惑、谢谢!

阅读 2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题