Java中的部分反序列化和序列化?

时间:2015-08-21 18:47:26

标签: java performance serialization

有大量的库和方法可以用Java序列化和反序列化对象。 我想要做的是涉及需要在处理节点之间来回发送的大而复杂的对象。

但是,每个节点只对一个或几个,通常是整个对象的一小部分感兴趣。处理节点处理该部分并创建一个新部件,在发送之前需要将其拼接到现有的序列化对象中。

为此,有两件事情非常重要:

  • 能够反序列化序列化对象的部分(从而节省解析/反序列化时间,对象创建时间,内存......),并且还将一些新部件的序列化添加到现有序列化对象中(再次节省时间)跳过序列化版本中不需要的部分应该非常快速和高效,理想情况下应该可以在流模式下完成,而无需一次将整个序列化数据保存在内存中
  • 整体紧凑,快速序列化和反序列化。

我非常灵活地了解实际创建类型化对象与非类型化地图和列表相比有多少自动化:如果所有其他方法都失败,我将能够将整个对象表示为仅包含地图,数组和嵌套数据结构的数据结构基本数据类型boolean,String和Number。

更新:忘了提及另外两个相当重要的要求:

  • 解决方案必须能够与现有对象一起使用,即不可能使用例如现有对象重新实现当前对象。不同的收藏类。

  • 理想情况下,解决方案应该基于开源软件,因为我需要的软件将作为开源软件发布。

1 个答案:

答案 0 :(得分:0)

听起来您正在计划将一大堆数据发送到处理节点的设计,该节点只会读取/修改/写入一小部分数据。但随后会将整个捆绑包发送到另一个节点。

为什么不让拥有所有数据的主机找出哪个节点需要哪些数据,只发送那些数据?然后处理可以并行发生,而不是菊花链。并且您的总网络流量将少于发送所有内容的每个节点:O(n * m)。

可能值得设计自己的消息格式,可能基于JSON,二进制或其他内容。