9

我正在寻找 Java 用于序列化对象的格式。默认序列化以二进制格式序列化对象。特别是,我很想知道一个程序的两次运行是否可以不同地序列化同一个对象。

一个对象应该满足什么条件,以便该对象在 Java 的默认序列化/反序列化往返下保持其行为?

4

7 回答 7

10

您需要http://java.sun.com/javase/6/docs/platform/serialization/spec/protocol.html上的 Java 对象序列化规范。

于 2009-10-01T00:08:39.590 回答
2

如果您有两个对象的所有属性都设置为相同的值,那么它们将以相同的方式序列化。

如果它不可重复,那么它就没有用了!

于 2009-09-30T23:28:36.817 回答
1

我喜欢@Stephen C 的 Object.hashCode() 示例。如果这种非确定性的哈希码被序列化了,那么当我们反序列化的时候,这些哈希码就没有用了。例如,如果我们序列化一个基于 Object.hashCode() 工作的 HashMap,其反序列化版本的行为将与原始映射不同。也就是说,查找同一个对象会在两张地图中给我们不同的结果。

于 2009-10-01T04:32:43.130 回答
1

他们将始终以相同的方式对其进行序列化。如果不是这种情况,则无法保证另一个程序可以正确地反序列化数据,从而违背了序列化的目的。

于 2009-09-30T23:30:59.137 回答
1

通常使用相同的数据运行相同的单线程算法将产生相同的结果。

但是,不能保证诸如HashSet序列化条目的顺序之类的事情。事实上,一个对象在序列化时可能会被巧妙地改变。

于 2009-10-01T01:15:37.477 回答
0

如果您不想要二进制文件,那么您可以在 java http://www.json.org/java/中使用 JSON ( http://www.json.org/example.html )

或 XML 相关http://www.developer.com/xml/article.php/1377961/Serializing-Java-Objects-as-XML.htm

于 2009-09-30T23:42:03.840 回答
-2

我正在寻找 Java 用于序列化对象的格式。

不要愚蠢,它以某种方式写了它们。这到底是多少可以并且可能应该由您确定。一个 Character 映射到 .... 呃,它涉及到,但与其重新发明轮子,不如让我们确切地问一下,您需要有什么可用于将对象重建到什么状态?

默认序列化以二进制格式序列化对象。

所以?(同样,不要试图变得愚蠢——听起来我们需要定义一个可能没有数据概念的问题)

我很想知道一个程序的两次运行是否可以不同地序列化同一个对象。

如果你有一个信息流,你将如何确定对象需要恢复到什么状态?

于 2009-09-30T23:32:43.423 回答