繁体   English   中英

Java的序列化对象表示

[英]Java's Representation of Serialized Objects

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

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

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

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

它们总是以相同的方式序列化它。 如果不是这种情况,则不能保证另一个程序可以正确地反序列化数据,从而破坏了序列化的目的。

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

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

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

如果您不想要二进制文件,那么您可以在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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM