【问题标题】:Random "Unexpected end of Zlib input stream" exception when trying to gunzip files尝试压缩文件时出现随机“Zlib 输入流意外结束”异常
【发布时间】: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 以确保它们在异常时正确关闭。这是一个好习惯。

标签: java linux gzip eof


【解决方案1】:

错误是由于另一个线程同时访问文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多