尝试压缩文件时出现随机“Zlib 输入流意外结束”异常

Random "Unexpected end of Zlib input stream" exception when trying to gunzip files

提问人:LostReality 提问时间:1/20/2022 最后编辑:Mark AdlerLostReality 更新时间:3/16/2022 访问量:2642

问:

我有一个类,应该将给定的 tar.gz 文件提取到一个简单的 .tar 文件中。 但是对于某些文件,会抛出此异常:

java.io.EOFException: Unexpected end of ZLIB input stream

管理提取的方法如下所示:

GZIPInputStream gzipInputStream;
FileOutputStream fileOutputStream;
byte data[] = new byte[BUFFER];
gzipInputStream = new GZIPInputStream( baseInputStream );
fileOutputStream = new FileOutputStream( destinationFile );
while ( ( count = gzipInputStream.read( data, 0, BUFFER ) ) != -1 )
{
    fileOutputStream.write( data, 0, count );
}
fileOutputStream.flush();
fileOutputStream.close();
gzipInputStream.close();

奇怪的是,某些文件会引发异常,有时不会,但我不知道为什么...... :(

我错过了什么吗?

非常感谢,

Java Linux gzip EOF

评论

0赞 ewramner 1/20/2022
输入文件错误/损坏?
0赞 LostReality 1/20/2022
我不这么认为,原始的 .tar.gz 文件是有效的。但是对于崩溃的给定 .tar.gz 文件,目标提取的 .tar 文件总是具有不同的大小,这意味着它在每次执行时会在不同的时间崩溃......
0赞 ewramner 1/21/2022
你如何获得baseInputStream?这不包含在您的代码中。另外,我建议对流使用 try-with-resources 以确保它们在异常时正确关闭。这是一个好习惯。

答:

2赞 LostReality 3/15/2022 #1

该错误是由于另一个线程并发访问该文件所致。