GZIPInputStream работает с FileInputStream, но не с InputStream - PullRequest
0 голосов
/ 30 мая 2018

При работе с GZIPInputStream я заметил, что использование InputStream, сгенерированного из Class.class.getResourceAsStream для файла gzipped, вызывает

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.

Я, разархивировав файл, могу получить правильный outputString, используя IOUtils.toString для InputStream, сгенерированного любым способом, поэтому я знаю, что к файлу обращаются успешно и проблема возникаетбыть с GZIPInputStream сам по себе.

1 Ответ

0 голосов
/ 30 мая 2018

Оказывается, Maven является виновником того, почему при использовании getResourceAsStream генерировалось исключение ZipException, а FileInputStream - нет.Файлы gz, которые я имел в src / main / resources, копировались в target / src / main / resources Maven и впоследствии автоматически повреждались при применении фильтрации 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>
...