Java ObjectInputStream在读取原语时抛出EOFEException
我很难理解Java中输出/输入流的行为 ObjectOutputStream实现DataOutput接口,因此,作为DataOutputStream,它具有编写原语的方法 但是反转ObjectInputStream写入的字节会抛出EOFJava ObjectInputStream在读取原语时抛出EOFEException,java,objectoutputstream,Java,Objectoutputstream,我很难理解Java中输出/输入流的行为 ObjectOutputStream实现DataOutput接口,因此,作为DataOutputStream,它具有编写原语的方法 但是反转ObjectInputStream写入的字节会抛出EOF byte array[]=new byte[50]; byte value=2; System.out.println(value); //prints 2 ByteArrayOutputStream os=new ByteA
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)
使用其他原语引发相同的异常。
将基本字节替换为字节包装类(并使用读/写对象),问题就消失了
有没有一种方法可以将ObjectOutputStream和ObjectInputStream与原语一起使用 您没有关闭ObjectOutputStream。只需在执行
oss.writeByte(value)
之后添加oss.close()
,您的程序就会按预期工作。没错。为什么使用writeObject时问题没有出现?@Z856可能是因为在这种情况下,流被刷新了