今天用ObjectOutputStream和ObjectInputStream進行對象序列化話操作的時候,報了java.io.EOFException異常。
異常代碼如下:
這個異常是因為我使用ObjectInputStream讀取對象時候,沒有判斷好ObjectInputStream是否讀取到了未知長度的檔案末尾,導緻到了檔案末尾,程式無法正常讀取檔案内容。

後來研究了一下以後,得出三種解救思路:
第一種方法:
在寫完對象後,加一句 oos.writeObject(null); 插入null是用來判斷是否讀取到結尾。oos是ObjectOutputStream執行個體。
然後讀對象的時候,使用while ((obj = ois.readObject()) != null),來判斷再次讀取一個對象,判定對象是否是空,如果不為null繼續讀取,如果為null停止讀取。
第二種方法:
将若幹個對象(數量不定)都裝入 一個容器中(如:ArrayList之類的),然後寫對象的時候,将該容器寫入。
讀取的時候,讀取出容器,然後再周遊容器,取出自己所需的對象。
第三個方法:
和第二個方法類似,将對象都存入數組中,然後寫入數組對象。
讀取的時候,取出數組,再周遊數組,取出所需的對象。
下面是具體的代碼操作:
1、要進行序列号的對象 Person.java
2、寫入對象的三種方法
3、讀取對象的三種方法
下面是結果:
寫入對象後,在src同級目錄下,生成3個檔案,分别是object.txt 、objectByArray.txt、objectByList.txt 如下圖所示。
讀取對象,結果如下:

==================================================================================================
作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!