例如,如果对象实例被序列化(导致'byte[] bs1')然后再次被序列化(导致'byte[] bs2'),'bs1'和'bs2'应该是相同的长度并且包含相同的字节?如果不是,为什么不呢?
为了避免歧义,我应该说同一个对象(不是两个“相同”对象 - 同一个实例)的两次序列化发生在彼此的毫秒内,在同一个线程中,在同一个 JVM 上 - 一个之前(可变)对象被传递给一个方法,一个之后。
请注意,该对象甚至没有被序列化、反序列化,然后重新序列化——它只是被序列化了两次。此外,关于对象的类也没有任何“聪明”之处;它只是一个简单的聚合 POJO。
我使用序列化字节作为临时测试来检测对象是否已在方法内更改。然而,我似乎看到了对象显然没有改变其状态的例子——但一个 byte[] 与另一个不同。
我假设 - 这只是一个假设 - 它们是一样的。有什么原因可能不是吗?
附录:
另外,很抱歉没有示例代码来说明这一点。目前这是嵌入在大型系统中的一小段代码。如有必要,我将尝试提取一个较小的、可运行的演示。不过,我想知道我的假设是否存在基本问题,因此是否有人可以解释为什么假设是错误的。
最佳答案
它可能并不总是完全通过序列化生成的相同字节序列。例如,Set
序列化其元素的顺序不能保证是恒定的,即使我们谈论的是单个实例也是如此。
关于java - 序列化的 Java 对象是否应该在每次序列化时始终由相同的字节序列表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241033/