1. 程式人生 > >ObjectInputStream迴圈讀資料報錯

ObjectInputStream迴圈讀資料報錯

**問題描述:**使用ObjectOutputStream向同一個檔案寫入多個物件,當每寫入一個物件即關閉ObjectOutputStream並在寫入下一個物件時重新開啟,通過ObjectInputStream讀取物件時,可以正常讀取第一個物件,但讀取第二個物件時報錯。報錯資訊如下:

Exception in thread "main" java.io.StreamCorruptedException: invalid type code: AC
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	at com.io.ObjectIOTest.readObject(ObjectIOTest.java:49)
	at com.io.ObjectIOTest.main(ObjectIOTest.java:40)

後來經過查詢發現: 建立ObjectOutputStream物件時,會向輸出流中寫入標誌資料“AC ED 00 05”;由於ObjectOutputStream建立了兩次,因此寫入第二個物件時,會再次新增標誌資料;ObjectInputStream僅能解析第一個物件前的標誌資料,後面的標誌資料當作物件資料處理,導致處理錯誤。要想避免這種問題,我們只能建立一個ObjectOutputStream,然後依次讀兩個物件即可。