假设我有一个包含很多已经序列化的对象的大文件(这是很容易的部分)。当我去反序列化时,我需要能够随机访问文件中的对象。我认为这样做的唯一方法是以某种方式将文件指针存储到每个对象。反序列化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 ...所以我需要序列化和反序列化跳过节点。有没有什么方法可以使用跳过列表来访问我需要的节点?我觉得我仍然需要一个文件指针来获得正确的对象 –