Java的序列化对象表示

时间:2009-09-30 23:26:32

标签: java serialization deterministic

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

对象满足什么条件才能使对象在Java的默认序列化/反序列化往返中保持其行为?

7 个答案:

答案 0 :(得分:10)

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

他们总是以同样的方式序列化它。如果不是这种情况,则无法保证其他程序可以正确地反序列化数据,从而无法实现序列化的目的。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

或者就此而言的XML http://www.developer.com/xml/article.php/1377961/Serializing-Java-Objects-as-XML.htm

答案 6 :(得分:-2)

  

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

不要失意,它会以某种方式写出来。究竟是怎样的,可能应该由你决定。一个角色映射到......呃,它参与了但是我们不是要重新发明轮子,而是让我们确切地问你需要什么才能将一个物体重建到一个状态?

  

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

所以? (再次,不要试图愚蠢 - 听起来我们需要定义一个可能没有数据隐藏的问题)

  

我很想知道两次跑步   程序可以序列化同一个对象   不同。

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