2013-10-14 73 views
0

有沒有辦法強制ObjectOutputStream不依賴於以前的寫入,應該每次都寫對象屬性和全部信息?ObjectOutputStream狀態機?

我可以從二進制文件中看到,只寫一些從以前的版本增量,如果你嘗試加載隨機項會失敗?

+0

不確定你的意思是'如果你試圖加載一個隨機項目就會失敗' - 你是否手動尋找到一個位置然後嘗試讀取? –

+0

是的,我試圖序列化例如10個對象,並存儲項目邊界(開始/結束),並直接從第5個位置加載,但它似乎像objectoutputstream不是爲此設計的... – blackuprise

+0

你一定會需要在每個對象之後重置流。這是可能的,因爲我以前做過... –

回答

2

是的,你想ObjectOutputStream.reset()

public void reset() throws IOException 

重置將丟棄已寫入流中的所有對象的狀態。狀態被重置爲與新的ObjectOutputStream相同。流中的當前點被標記爲重置,因此相應的ObjectInputStream將在同一點重置。以前寫入流的對象不會被認爲已經在流中。他們會再次被寫入流中。

早些時候的Javadoc討論寫作引用已經看到的物體:

的默認序列化機制的對象寫入對象的類,類簽名,以及所有的非暫時性的價值和非靜態字段。對其他對象(除了在瞬態或靜態字段中)的引用也會導致寫入這些對象。 使用引用共享機制對單個對象的多個引用進行編碼,以便可以將對象的圖形恢復到原始寫入時的相同形狀。

由於reset的Javadoc解釋,稱reset導致流狀態復位。您應該知道,這個重置操作本身將字節寫入流中(以便解碼端也知道何時重置流)。