**問題描述:**使用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,然後依次讀兩個對象即可。