Java ObjectInputStream在读取原语时抛出EOFEException

Java 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

我很难理解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)
使用其他原语引发相同的异常。 将基本字节替换为字节包装类(并使用读/写对象),问题就消失了


有没有一种方法可以将ObjectOutputStream和ObjectInputStream与原语一起使用

您没有关闭ObjectOutputStream。只需在执行
oss.writeByte(value)
之后添加
oss.close()
,您的程序就会按预期工作。

没错。为什么使用writeObject时问题没有出现?@Z856可能是因为在这种情况下,流被刷新了