Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ObjectInputStream超过DeflaterInputStream抛出StreamCorruptedException_Java_Serialization_Gzip_Deflate - Fatal编程技术网

Java ObjectInputStream超过DeflaterInputStream抛出StreamCorruptedException

Java ObjectInputStream超过DeflaterInputStream抛出StreamCorruptedException,java,serialization,gzip,deflate,Java,Serialization,Gzip,Deflate,我正试图在DeflaterOutputStream上使用ObjectOutputStream来将deflated数据写入底层流。但是,当我尝试使用InputStream对应项读取数据时,会引发异常。值得注意的是,将Deflate{Output,Input}Stream替换为GZip{Output,Input}Stream,它可以正常工作。显示此行为的示例代码如下所示: ByteArrayOutputStream baos = new ByteArrayOutputStream(); try(Ob

我正试图在
DeflaterOutputStream
上使用
ObjectOutputStream
来将deflated数据写入底层流。但是,当我尝试使用
InputStream
对应项读取数据时,会引发异常。值得注意的是,将
Deflate{Output,Input}Stream
替换为
GZip{Output,Input}Stream
,它可以正常工作。显示此行为的示例代码如下所示:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
try(ObjectOutputStream oos = new ObjectOutputStream(new DeflaterOutputStream(baos))) {
    oos.writeObject("test");
}

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
try(ObjectInputStream oos = new ObjectInputStream(new DeflaterInputStream(bais))) {
    System.out.println(oos.readObject());
}
它引发以下异常:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 789CAB98
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:349)
    at Main.main(Main.java:23)
线程“main”java.io.StreamCorruptedException中的异常:无效流头:789CAB98 位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857) 位于java.io.ObjectInputStream。(ObjectInputStream.java:349) Main.Main(Main.java:23)
有人知道为什么会发生这种情况吗?

我已经弄明白了,这是一个愚蠢的错误。但是回答我自己的问题,这样未来的人们就不会再上当了:

DeflaterOutputStream
的反向类是
InflaterInputStream
,而不是
DeflaterInputStream
。因此,代码应该如下所示:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
try(ObjectOutputStream oos = new ObjectOutputStream(new DeflaterOutputStream(baos))) {
    oos.writeObject("test");
}

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
try(ObjectInputStream oos = new ObjectInputStream(new InflaterInputStream(bais))) {
    System.out.println(oos.readObject());
}