java - 编码和未编码的对象

标签 java

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

最佳答案

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

解码只是这个过程的反面/另一面;获取通过编码创建的对象的表示,并使用它在 JVM 中重构对象实例。


老实说,我不确定您问题的另一部分究竟是什么意思。原始对象通常不会通过编码更改(这在概念上是只读操作,例如获取副本)。所以它的hashcode等保持不变。

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

关于java - 编码和未编码的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255180/

相关文章:

java - 如何给你的程序添加声音?

java - 从 bytes[] 转换为 EBCDIC 字符串

java - appengine 中的配置文件激活 :deploy

java - 如何在两个不同的类中使用同一个计数器

Java:验证特定的字符串模式

java - spring 3问题中在ajax json中获取阿拉伯语单词

java - Glassfish 3.1.2.2。 linux环境build 5 ear应用部署问题

java - 如何在 Query OnCompleteListener 之外使用此变量(变量在 OnCreate 之外定义)?

java - 如何打开电子邮件客户端并在java中自动附加文件

java - 解析oasis xml文档