【发布时间】:2011-01-07 16:14:26
【问题描述】:
我正在寻找有关基于以下 (Java) 序列化对象图的最佳方法的一些信息:
- 如果它们的状态相等,则同一类的两个对象必须二进制相等(逐位)与 true 相比。 (必须不依赖于 JVM 字段排序)。
- 集合仅使用数组建模(没有集合)。
- 所有实例都是不可变的
- 序列化格式应为 byte[] 格式,而不是基于文本的格式。
- 我可以控制图表中的所有类。
我不想仅仅为了支持序列化而在类中放置一个空的构造函数。 我已经研究过基于我自己的遍历和 Objenisis 实现一个解决方案,但我的问题似乎并不那么独特。首先更好地检查任何现有/完整的解决方案。
更新详情:
首先,感谢您的帮助!
- 对象必须根据对象状态序列化为完全相同的位顺序。这很重要,因为二进制内容将被数字签名。序列化格式的重构将基于对象的状态,而不是存储的原始位。
- 不同技术之间的互操作性很重要。我确实看到该软件在 ex 上运行。 .Net 未来。序列化格式中没有 Java 风格。
关于不可变性 cmets 的注意事项:数组的值从参数复制到构造函数的内部字段。不太重要。
最好的问候,
尼古拉斯·林德伯格
【问题讨论】:
-
数组不是不可变的,因此您的要求在那里似乎存在冲突(除非您的意思是所有对象除了数组都应该是不可变的)。
-
@ColinD,我认为他的意思是按照惯例,数组一旦设置就不会更改。 Java 中没有任何东西可以强制执行此行为。
-
@Peter:没有什么 Java 可以强制数组的不变性,但是对象数组在 Java 中真的没有太多位置了,除了在集合的实现中。并且集合可以是不可变的。
-
@ColinD,我经常使用数组可能不会让你感到惊讶。虽然不如收藏。 ;)
-
@Peter:对象数组(显然,基元是一个不同的故事)在几乎所有方面都不如集合。在我看来,实际上很少需要使用它们。
标签: java serialization deserialization