在客户端 - 服务器设置中,我修改了服务器发送的对象的类定义,并且预计会在客户端崩溃(客户端jar尚未更新以反映这些更改)。
然而,它并没有崩溃。
注意:客户端使用对象的方式可能会避免崩溃。客户端从不转换反序列化的Object,也从不使用已删除的字段。该对象仅通过Jython从Python脚本中使用,在使用对象的字段时可能会使用一些后期绑定机制(反射?),从而使事情成为可能。这也假定序列化包括类'签名,这是真的(由ObjectOutputStream文档提到)。
另请注意:我们永远不会更改serialVersionUid。
我的推理似乎正确吗?
答案 0 :(得分:3)
序列化将使用类签名仅在您不提供serialVersionUID时生成版本控制,因为您提供的一个类签名将不会被使用。
由于它没有改变,因此假设两者兼容并执行默认行为
答案 1 :(得分:1)
如果您在课堂上使用serialVersionUID
,那么您需要更改它。
否则,如果有任何更改,java将依赖反射来抛出异常。
答案 2 :(得分:0)
只要serialVersionUID匹配,删除字段不是不兼容的更改。请参阅对象序列规范的对象版本控制章节。