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與基元一起使用?
這是正確的。 爲什麼使用writeObject的問題沒有出現? – Z856
@ Z856可能是因爲該流在這種情況下被刷新 – Titus