我注意到在使用 GZIPInputStream 时,在 gzipped 文件上使用从 Class.class.getResourceAsStream 生成的 InputStream 会导致
java.util.zip.ZipException: invalid code lengths set
在 GZIPInputStream 中使用时,但在同一个文件上使用 FileInputStream 似乎工作正常。有谁知道是什么原因造成的?
例如:
InputStream is = new FileInputStream("src/main/resources/testFile.gz");
GZIPInputStream zis = new GZIPInputStream(is);
String outputStr = IOUtils.toString(zis, "utf-8");
使用解压缩的文件数据成功生成输出字符串,同时:
InputStream is = Class.class.getResourceAsStream("/testFile.gz");
GZIPInputStream zis = new GZIPInputStream(is);
String outputStr = IOUtils.toString(zis, "utf-8");
生成上面的 ZipException。
当我解压缩文件时,我能够在生成的 InputStream 上使用 IOUtils.toString 获得正确的 outputString,因此我知道该文件已成功访问,并且问题似乎与 GZIPInputStream 本身有关。