0
有沒有辦法強制ObjectOutputStream不依賴於以前的寫入,應該每次都寫對象屬性和全部信息?ObjectOutputStream狀態機?
我可以從二進制文件中看到,只寫一些從以前的版本增量,如果你嘗試加載隨機項會失敗?
有沒有辦法強制ObjectOutputStream不依賴於以前的寫入,應該每次都寫對象屬性和全部信息?ObjectOutputStream狀態機?
我可以從二進制文件中看到,只寫一些從以前的版本增量,如果你嘗試加載隨機項會失敗?
是的,你想ObjectOutputStream.reset()
public void reset() throws IOException
重置將丟棄已寫入流中的所有對象的狀態。狀態被重置爲與新的ObjectOutputStream相同。流中的當前點被標記爲重置,因此相應的ObjectInputStream將在同一點重置。以前寫入流的對象不會被認爲已經在流中。他們會再次被寫入流中。
早些時候的Javadoc討論寫作引用已經看到的物體:
的默認序列化機制的對象寫入對象的類,類簽名,以及所有的非暫時性的價值和非靜態字段。對其他對象(除了在瞬態或靜態字段中)的引用也會導致寫入這些對象。 使用引用共享機制對單個對象的多個引用進行編碼,以便可以將對象的圖形恢復到原始寫入時的相同形狀。
由於reset
的Javadoc解釋,稱reset
導致流狀態復位。您應該知道,這個重置操作本身將字節寫入流中(以便解碼端也知道何時重置流)。
不確定你的意思是'如果你試圖加載一個隨機項目就會失敗' - 你是否手動尋找到一個位置然後嘗試讀取? –
是的,我試圖序列化例如10個對象,並存儲項目邊界(開始/結束),並直接從第5個位置加載,但它似乎像objectoutputstream不是爲此設計的... – blackuprise
你一定會需要在每個對象之後重置流。這是可能的,因爲我以前做過... –