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());
}