Exception: Unexpected end of ZLIB input stream

Posted 格格巫 MMQ!!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exception: Unexpected end of ZLIB input stream相关的知识,希望对你有一定的参考价值。

There is something wrong with GZIPInputStream or GZIPOutputStream. Just please read the following code (or run it and see what happens):

def main(a: Array[String])
val name = “test.dat”
new GZIPOutputStream(new FileOutputStream(name)).write(10)
println(new GZIPInputStream(new FileInputStream(name)).read())

It creates a file test.dat, writes a single byte 10 formatting by GZIP, and read the byte in the same file with the same format.

And this is what I got running it:

Exception in thread “main” java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at nbt.Test$.main(Test.scala:13)
at nbt.Test.main(Test.scala)
The reading line seems going the wrong way for some reason.

I googled the error Unexpected end of ZLIB input stream and found some bug reports to Oracle, which were issued around 2007-2010. So I guess the bug still remains in some way, but I’m not sure if my code is right, so let me post this here and listen to your advice. Thank you!

回答1:

You have to call close() on the GZIPOutputStream before you attempt to read it. The final bytes of the file will only be written when the file is actually closed. (This is irrespective of any explicit buffering in the output stack. The stream only knows to compress and write the last bytes when you tell it to close. A flush() probably won’t help … though calling finish() instead of close() should work. Look at the javadocs.)

Here’s the correct code (in Java);

package test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZipTest

public static void main(String[] args) throws FileNotFoundException, IOException 
    String name = "/tmp/test";
    GZIPOutputStream gz = new GZIPOutputStream(new FileOutputStream(name));
    gz.write(10);
    gz.close();
    System.out.println(new GZIPInputStream(new FileInputStream(name)).read());


(I’ve not implemented resource management properly. Don’t treat this as an example of “good code”.)

以上是关于Exception: Unexpected end of ZLIB input stream的主要内容,如果未能解决你的问题,请参考以下文章

INSTALL PARSE FAILED UNEXPECTED EXCEPTION 问题

INSTALL PARSE FAILED UNEXPECTED EXCEPTION 问题

FlinkDiscard registration from TaskExecutor SplitFetcher received unexpected exception

zookeeper启动报 Unexpected exception, exiting abnormally 错误

电脑蓝屏提示unexpected store exception的解决方法

Unexpected end of input 和 Unexpected token var 和 Unexpected token ;