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,然後依次讀兩個對象即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章