java - 序列化的 Java 对象是否应该在每次序列化时始终由相同的字节序列表示?

标签 java serialization

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

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

请注意,该对象甚至没有被序列化、反序列化,然后重新序列化——它只是被序列化了两次。此外,关于对象的类也没有任何“聪明”之处;它只是一个简单的聚合 POJO。

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

我假设 - 这只是一个假设 - 它们是一样的。有什么原因可能不是吗?

附录:

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

最佳答案

它可能并不总是完全通过序列化生成的相同字节序列。例如,Set 序列化其元素的顺序不能保证是恒定的,即使我们谈论的是单个实例也是如此。

关于java - 序列化的 Java 对象是否应该在每次序列化时始终由相同的字节序列表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241033/

相关文章:

serialization - 在 .Net 2.0 中序列化/反序列化 Dictionary<String,String> 的最佳方法是什么?

java - 在 Java 中将两个数字精确相乘

java - Eclipse Java switch-case 失败警告

java - HttpAsyncPost 设置 header

java - 在Java中反序列化C#生成的RabbitMQ消息

java - 使用 Simple 设置 XML 反序列化类(XNA 到 Java 移植)

java - 如何动态加载新的jar文件到JavaVM

java - 执行时间和大O计算quicksort

c# - 如何使JSON.NET忽略对象关系?

java - Android Parcelable final