对象的默认序列化机制写入对象的类、类签名以及所有非瞬态和非静态字段的值
- 这里的“对象类”和“类签名”有什么区别吗?
- 由于“类签名”和“类”也通过了,JVM 是否在目标系统上加载默认类?(或)在序列化对象中传递的类?
对象的默认序列化机制写入对象的类、类签名以及所有非瞬态和非静态字段的值
“写对象的类”这句话的真正意思是“写对象的类名”。java对象序列化不写类字节,只写类名。稍后反序列化对象时,它将使用当前 jvm 中定义的类字节。
您不存储某种序列化的类定义,只存储您序列化的实例的内容。反序列化时,JVM 将使用在其类路径中找到的类定义。
所以你必须了解版本控制的工作原理......
我相信“类签名”应该是指类'(和可序列化的超类')字段名称和类型,以及序列版本 UID。
默认情况下,ObjectInputStream
在“最新”类加载器(即调用堆栈上最接近的非引导类加载器)中查找类名。使用指定的类加载器查找合理的子类。默认情况下,RMI(使用系统属性将其关闭)查找位置(URL)以从嵌入在流中的注释中加载新类。