关于java.util.zip.ZipException: Corrupt GZIP trailer异常?
版本环境
docker-Alpine Linux 3.15-JDK11
问题描述
应用程序会通过GZIPInputstream类读取一个压缩文件、 在两个相同的docker环境部署、 java环境压缩文件等都验证一致、 在一个环境就会报上述的异常错误
问题分析
- GZIPInputstream类read函数会循环读取文件内容直到文件结尾、即read返回-1、 然后会调用readTrailer函数
- 报错异常就是调用readTrailer函数、此函数会比较已经读取文件内容的crc以及文件尾部读取的crc、不等就会抛出异常、crc用的java.util.zip.CRC32
- 通过jdb调试发现、 read函数会调用1000多次、 每次读取文件内容后都会更新crc值、 只有在最后一次update时crc会不一致、其他都是一样的
- 通过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