【发布时间】:2015-08-21 18:47:25
【问题描述】:
有大量的库和方法可以在 Java 中序列化和反序列化对象。 我想做的涉及需要在处理节点之间来回发送的相当大而复杂的对象。
然而,每个节点只对一个或几个感兴趣,通常是整个对象的一小部分。处理节点处理该部分并创建一个新部分,该部分需要在发送之前拼接到现有的序列化对象中。
为此,有两件事非常重要:
- 能够仅反序列化部分序列化对象(从而节省解析/反序列化时间、对象创建时间、内存...),还可以将一些新部分的序列化添加到现有序列化对象中(再次节省时间和内存)——跳过序列化版本中不需要的部分应该非常快速和高效,理想情况下应该可以在流模式下进行,而无需一次将整个序列化数据保存在内存中
- 整体紧凑且快速的序列化和反序列化。
对于实际创建类型化对象与非类型化映射和列表的自动化程度,我非常灵活:如果一切都失败了,我将能够将整个对象表示为只有映射、数组和基本数据类型布尔、字符串和数字。
更新:忘了提及另外两个相当重要的要求:
解决方案必须可以使用现有对象,即不能使用例如重新实现当前对象。不同的集合类。
理想情况下,解决方案应该基于开源软件,因为我需要的软件将作为开源软件自行发布。
【问题讨论】:
-
是否可以将复杂对象分解为多个部分并序列化各个部分?
-
你研究过外化吗?
-
有许多库允许您使用序列化对象来提取或更新您感兴趣的字段。Chronicle Byte/Wire、SBE、Javolution 结构。
-
@Vince Emigh:据我所知,外部化基本上解决了编译时的问题,并且对于数据的一个特定子集,但我需要能够在运行时做到这一点,并且对于同一对象的多个子集:如果我将对象发送到节点 A,我想查看对象的 part1 和 part2 并添加 partA,节点 B 可能想要访问 part3 并添加 partB1 和 partB2。
标签: java performance serialization