java:用引用序列化大型列表
我有一个包含100000个元素的列表。 每个元素都包含一个Hashmap,其中存储了许多元素 计算对象之间的依赖关系需要很长时间,因此我想序列化结果以快速读取。元素是图的节点,hashmap中的元素是它们的邻居和边权重- 在反序列化之后保持对象之间的引用很重要,这意味着hashmap中的元素必须与我的100.000元素列表中的元素完全相同。 我尝试过java序列化,但由于列表中有太多循环引用,因此出现了StackOverflower错误。 我尝试在额外的步骤中序列化每个元素:java:用引用序列化大型列表,java,serialization,graph,Java,Serialization,Graph,我有一个包含100000个元素的列表。 每个元素都包含一个Hashmap,其中存储了许多元素 计算对象之间的依赖关系需要很长时间,因此我想序列化结果以快速读取。元素是图的节点,hashmap中的元素是它们的邻居和边权重- 在反序列化之后保持对象之间的引用很重要,这意味着hashmap中的元素必须与我的100.000元素列表中的元素完全相同。 我尝试过java序列化,但由于列表中有太多循环引用,因此出现了StackOverflower错误。 我尝试在额外的步骤中序列化每个元素: out.write
out.writeObject(o);
为列表中的每个元素调用。
但是在反序列化之后,元素中的哈希映射为null
我曾尝试使用hibernate将其存储到数据库中,但如果使用
@org.hibernate.annotations.Type(
type = "org.hibernate.type.SerializableToBlobType"
)
我的地图中的元素看起来相同,但都是新对象
我已经创建了一个新类,其中包含来自我的映射的键和对象,并将其存储在一个额外的数据库表中,但hibernate tooks会永远获取它们
用原始对象替换反序列化后的对象也需要花费很长时间
是否有人有想法将此列表存储起来,以便随时快速使用?
我愿意尝试另一种数据格式来存储图形。有什么想法吗?
谢谢大家! 可能对您有用。“我尝试过java序列化,但由于列表太长,我得到了一个StackOverflower错误。”大型列表不会导致
StackOverflower错误
,尽管它可能会导致OutOfMemoryError
。只有当你有循环引用时,堆栈才会溢出。“也许这个问题的答案对你有用。”我搜索了整个互联网:)“一个大列表不会导致StackOverflowerError,尽管它可能会导致OutOfMemoryError”你是对的。我会改正的