когда я использую GZIPInputStream для чтения файла gz, он работает, но выдает EOFException - PullRequest
0 голосов
/ 30 марта 2019

Я использую GZIPInputStream, чтобы прочитать файл gz, Он работает, но выдает EOFException, как мне его решить, спасибо.

in = new GZIPInputStream(new FileInputStream(file));
List<String> list = IOUtils.readLines(in, "UTF-8");
for (String item : list) {
    System.out.println(item);
}

Исключение:

java.io.EOFException
  at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:268)
  at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:258) 
  at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:164) 
  at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:79) 
  at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:91) 
  at com.datamarket.job.controller.JobController.process(JobController.java:132)

1 Ответ

0 голосов
/ 30 марта 2019

Если вы посмотрите на трассировку стека, вы увидите, что ошибка в readHeader.Обычно это означает, что файл gzip поврежден.Возможно, вы читаете что-то, что на самом деле не является правильным файлом gzip?Например, пустой файл (поскольку кажется, что чтение первых двух байтов заканчивается с конца файла)?

Проверьте, можете ли вы прочитать тот же файл из командной строки с помощью команды gzip и перепроверить длину файла,Вы также можете протестировать свой код на хорошо известном файле, т.е. созданном вами.

...