Java ObjectInputStream在读取基元时抛出EOFException

时间:2016-01-06 17:10:50

标签: 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 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与原语一起使用?

1 个答案:

答案 0 :(得分:2)

您没有关闭ObjectOutputStream。只需在执行oss.writeByte(value)后添加{{1}},您的程序就可以正常运行。