序列化的Java对象是否应始终由相同的字节序列表示,每次都是序列化的?

时间:2013-06-21 17:27:57

标签: java serialization

例如,如果对象实例被序列化(导致'byte [] bs1')然后再次序列化(导致'byte [] bs2'),'bs1'和'bs2'应该是相同的长度并包含相同的字节?如果没有,为什么不呢?

为了避免歧义,我应该说同一个对象的两个序列化(不是两个'相同的'对象 - 相同的实例),在相同的线程中,在相同的JVM上发生在彼此的毫秒之内 - 一个之前的一个(mutable)对象被传递给一个方法,一个在。

之后

请注意,该对象甚至没有被序列化,反序列化,然后重新序列化 - 它只是被序列化两次。而且,对象的类没有任何“聪明”的东西;它只是一个简单的聚合POJO。

我正在使用序列化字节作为临时测试来检测对象是否已在方法内更改。但是,我似乎在看到对象显然没有改变其状态的示例 - 但是一个字节[]与另一个不同。

我假设 - 这只是一个假设 - 他们会是一样的。他们可能没有某种理由吗?

附录:

此外,没有示例代码的道歉,以说明这一点。目前,这是嵌入在大型系统中的一小段代码。如有必要,我会尝试提取一个较小的,可运行的演示。我想知道我的假设是否存在基本问题,因此如果有人能解释为什么这个假设是错误的。

1 个答案:

答案 0 :(得分:5)

它可能并不总是 exact 通过序列化产生的相同字节序列。例如,即使我们讨论的是单个实例,Set序列化其元素的顺序也不能保证不变。