【发布时间】:2022-01-20 14:08:36
【问题描述】:
我有一个类应该将给定的 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();
奇怪的是,某些文件会抛出异常,有时不会,但我不知道为什么...... :(
我错过了什么吗?
非常感谢,
【问题讨论】:
-
输入文件错误/损坏?
-
我不这么认为,原来的.tar.gz文件是有效的。但是对于崩溃的给定 .tar.gz 文件,目标提取的 .tar 文件始终具有不同的大小,这意味着它在每次执行时的不同时间崩溃...
-
如何获得baseInputStream?这不包含在您的代码中。另外,我建议对流使用 try-with-resources 以确保它们在异常时正确关闭。这是一个好习惯。