2016-01-06 43 views
1

我很難理解Java中輸出/輸入流的行爲。Java ObjectInputStream在讀取原語時拋出EOFException

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與基元一起使用?

回答

2

你沒有關閉你的ObjectOutputStream。在做oss.writeByte(value)之後,只需添加oss.close(),並且程序應按預期工作。

+0

這是正確的。 爲什麼使用writeObject的問題沒有出現? – Z856

+0

@ Z856可能是因爲該流在這種情況下被刷新 – Titus

相關問題