假設我有一個包含很多已經序列化的對象的大文件(這是很容易的部分)。當我去反序列化時,我需要能夠隨機訪問文件中的對象。我認爲這樣做的唯一方法是以某種方式將文件指針存儲到每個對象。反序列化Java中的對象
基本上我最終會得到一個大型的序列化對象文件,並且當我去檢索一個對象時,不想反序列化整個文件。
任何人都可以指出我正確的方向嗎?
假設我有一個包含很多已經序列化的對象的大文件(這是很容易的部分)。當我去反序列化時,我需要能夠隨機訪問文件中的對象。我認爲這樣做的唯一方法是以某種方式將文件指針存儲到每個對象。反序列化Java中的對象
基本上我最終會得到一個大型的序列化對象文件,並且當我去檢索一個對象時,不想反序列化整個文件。
任何人都可以指出我正確的方向嗎?
你不能。出於某種原因,序列化被稱爲序列化。它是連續的。隨機訪問一個對象流將無法正常工作,原因包括流標頭,對象句柄,...
爲什麼不將文件指針存儲到對象開始工作的位置?我認爲這就是我們應該做的......使用句柄來存儲起始位置和長度,然後反序列化。這會工作嗎? –
@LoganM因爲之前的序列化對象不會被重新序列化。如果對象包含已經在流中序列化的成員,則不會重新序列化。所以對象的正確反序列化依賴於讀取整個流到那個點。 – EJP
如何使用某種對象DB?像[Neodatis](http://neodatis.wikidot.com/)(還有很多其他的,請參閱[維基百科頁面](https://en.wikipedia.org/wiki/Comparison_of_object_database_management_systems)) – 2016-04-28 18:12:51
如果您序列化將該對象轉換爲目錄結構,並在目錄的頂層有一個查找文件。每次你需要一個對象時,你都要解析查找文件,然後抓取你需要的特定對象文件。只是一個想法。 –
我正試圖在文件上存儲一個skiplist ...所以我需要序列化和反序列化跳過節點。有沒有什麼方法可以使用跳過列表來訪問我需要的節點?我覺得我仍然需要一個文件指針來獲得正確的對象 –