对象编组和解组

Har*_*ana 37 java

对象编组和解编是什么意思?当上述操作发生时对对象状态有什么影响,即序列化对hashCodeequals?的影响?

And*_*yle 48

对一个对象进行编组是将其转换为适合于序列化存储或传输的形式; 也就是说,将它从JVM内存中的原生形式转换为可以通过线路发送,插入文件/数据库等的形式.具体情况将根据所涉及的编组形式而有所不同; Java的默认序列化机制是一种方法,但将对象转换为XML或JSON表示同样有效.

解组只是这个过程的反面/另一面; 表示由编组创建的对象,并使用它来重构JVM中的对象实例.


老实说,我不确定你的问题的其他部分究竟是什么意思.原始对象通常不会被编组改变(这在概念上是一种只读操作,就像复制一样).因此它的哈希码等将保持不变.

根据定义,对象的未编组副本将具有与原始对象相同的逻辑状态(毕竟,这是编组的重点,以便能够再现等效对象).因此,在这方面,它的状态,即其字段的值是相同的.但是,如果哈希码取决于环境因素 - 例如机器的主机名或存储实例的内存地址 - 那么它当然可以报告不同的内容.这与默认Object.hashCode()实现特别相关,其中对象的存储位置很重要.(但是这与编组无关;在同一个JVM中以任何方式获取对象的"完美副本"在这种情况下仍然会导致不同的哈希码.)


Pet*_*rey 33

编组意味着产生一个字节流,它包含足够的信息以便能够重新构建对象.

这对原始对象没有影响,它是一个只读操作.解组导致创建另一个不相关的对象(通常).

复制,很可能具有相同的hashCode(),并equals() == truecompareTo() == 0(假设它的可比性).

  • 所以基本上与Serialize/DeSerialize完全相同 (4认同)