【问题标题】:Java - Default Serialization of ObjectsJava - 对象的默认序列化
【发布时间】:2012-05-01 01:35:08
【问题描述】:

对象的默认序列化机制写入的类 对象、类签名和所有非瞬态的值 和非静态字段

  1. 这里的“对象类”和“类签名”有什么区别吗?
  2. 既然“类签名”和“类”也通过了,JVM会在目标系统上加载默认类吗? (或)在序列化对象中传递的类?

【问题讨论】:

  • “默认类”是什么意思?没有默认类。
  • 我在这里猜测,但我认为该类可以是例如 one/package/MyClass$AnInnerClass 并且签名会说明它是否公开,它扩展/实现的内容等等。谁能证实这一点?

标签: java serialization


【解决方案1】:

“写对象的类”这句话的真正意思是“写对象的类name”。 java对象序列化不写类字节,只写类名。以后反序列化对象时,会使用当前jvm中定义的类字节。

【讨论】:

    【解决方案2】:

    您不存储某种序列化的类定义,只存储您序列化的实例的内容。反序列化时,JVM 将使用在其类路径中找到的类定义。

    所以你必须了解how versionning works...

    【讨论】:

      【解决方案3】:

      我相信“类签名”应该是指类'(和可序列化的超类')字段名称和类型,以及序列版本 UID。

      默认情况下,ObjectInputStream 在“最新”类加载器(即调用堆栈上最接近的非引导类加载器)中查找类名。使用指定的类加载器查找合理的子类。默认情况下,RMI(使用系统属性将其关闭)查找位置(URL)以从嵌入在流中的注释中加载新类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 2012-07-16
        • 2018-12-19
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多