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

标签 java performance serialization

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

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

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

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

我对于实际创建类型化对象与非类型化映射和列表相比获得多少自动化程度非常灵活:如果其他一切都失败,我将能够将整个对象表示为仅包含映射、数组和基本数据类型 boolean 值、字符串和数字的嵌套数据结构。

更新:忘记提及两个额外的、相当重要的要求:

  • 解决方案必须可以使用现有对象,即不可能使用例如不同的集合类。

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

最佳答案

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

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

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

关于java - Java中的部分反序列化和序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32147411/

相关文章:

php - 是否有更有效的方法来创建年/月列表?

json - 使用 kotlinx.serialization 库反序列化具有不同值类型的 JSON 数组

java - 在单独线程上刷新 Gui

java - Clojure中如何向静态方法传入参数?

c++ - 相同的 c 和 c++ 程序之间的巨大速度差异

java - List<Long> 在 Java 中未序列化为 String

c# - ASP.NET - 在不序列化的情况下保存在 View 状态中

java - 如何从 Mule 4 中的文件中读取 JSON 字符串

java - 读取数据的数组映射

c# - 从数据库还是从内存查询?哪个更快?