关于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函数实现应该也一致吧。这里我没有看、 请各位大佬帮忙解答下疑惑、谢谢!

以上是 关于java.util.zip.ZipException: Corrupt GZIP trailer异常? 的全部内容, 来源链接: utcz.com/p/944789.html

回到顶部