【发布时间】:2016-04-10 21:01:09
【问题描述】:
我很难理解 Java 中输出/输入流的行为。
ObjectOutputStream 实现了 DataOutput 接口,因此作为 DataOutputStream,它具有编写原语的方法。
但是反转写入的字节 ObjectInputStream 会抛出 EOF。
byte array[]=new byte[50];
byte value=2;
System.out.println(value); //prints 2
ByteArrayOutputStream os=new ByteArrayOutputStream();
ObjectOutputStream oss=new ObjectOutputStream(os);
oss.writeByte(value);
array = os.toByteArray();
//get back the original value from the byte array
ObjectInputStream ois=new ObjectInputStream(new ByteArrayInputStream(array));
byte result=ois.readByte(); // -> throws EOF Exception (see below)
System.out.println("Result -> "+result);
抛出此异常
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:392)
at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2827)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:971)
at z.reti.TestOOS.main(TestOOS.java:21)
使用其他原语会引发相同的异常。 用 Byte 包装类(并使用 Read/WriteObject)替换原始字节,问题就消失了……
有没有办法将 ObjectOutputStream 和 ObjectInputStream 与原语一起使用?
【问题讨论】: