我很难理解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与原语一起使用?
答案 0 :(得分:2)
您没有关闭ObjectOutputStream。只需在执行oss.writeByte(value)
后添加{{1}},您的程序就可以正常运行。