2

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)
4

1 回答 1

2

如果您查看堆栈跟踪,您可以看到错误位于readHeader. 这通常意味着 gzip 文件已损坏。也许您正在阅读实际上不是有效 gzip 文件的内容?例如一个空文件(因为读取前两个字节似乎因文件结尾而失败)?

查看是否可以使用 gzip 命令从命令行读取相同的文件,并仔细检查文件长度。您还可以在已知的良好文件(即您创建的文件)上测试您的代码。

于 2019-03-30T09:24:45.450 回答