gpt4 book ai didi

java - GZIPInputStream 可以与 FileInputStream 配合使用,但不能与 InputStream 配合使用

转载 作者:行者123 更新时间:2023-12-02 11:11:28 25 4
gpt4 key购买 nike

我在使用 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。

当我解压缩文件时,我可以使用 IOUtils.toString 在以任何一种方式生成的 InputStream 上获取正确的输出字符串,因此我知道文件已成功访问,并且问题似乎出在 GZIPInputStream 自身上。

最佳答案

事实证明,Maven 是使用 getResourceAsStream 生成 ZipException 而 FileInputStream 却没有生成 ZipException 的罪魁祸首。我在 src/main/resources 下的 gz 文件被 Maven 复制到 target/src/main/resources,并且随后在应用 Maven 过滤时自动损坏。 FileInputStream 的目标是 src/main/resources 下的文件,而 getResourceAsStream 的目标是 target/src/main/resources 下的文件。该问题的解决方案是禁用对 src/main/resources 目录中的资源的过滤,如下所示。

<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>false</filtering>
</resource>

关于java - GZIPInputStream 可以与 FileInputStream 配合使用,但不能与 InputStream 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com