DeflaterOutputStream
よりObjectOutputStream
を使用して、収縮したデータを基になるストリームに書き込もうとしています。しかし、彼らのInputStream
のカウンターパートでデータを読み込もうとすると、例外がスローされます。 Deflate{Output,Input}Stream
をGZip{Output,Input}Stream
に置き換えると、期待どおりに動作することに注意してください。この動作を示すサンプルコードは、以下に見られることができます。DeflaterInputStream上のObjectInputStreamがStreamCorruptedExceptionをスローする
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());
}
これは、次の例外がスローされます:exaclyこれがなぜ起こるか
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)
誰でも知っていますか?