java - 为什么即使在不兼容的对象版本之间,java 反/序列化也会成功?

标签 java serialization late-binding

在客户端-服务器设置中,我修改了服务器发送的对象的类定义,预计会在客户端崩溃(客户端 jar 尚未更新以反射(reflect)这些更改)。

但是它不会崩溃。

注意:客户端使用对象的方式可能会避免崩溃。客户端永远不会强制转换反序列化的对象,也永远不会使用已删除的字段。该对象仅通过 Jython 从 Python 脚本中使用,这可能在使用对象的字段时采用了一些后期绑定(bind)机制(反射?),因此使事情成为可能。这还假定序列化包括类的签名,这是真的(在 ObjectOutputStream 的文档中提到)。

另请注意:我们从不更改 serialVersionUid。

我的推理是否正确?

最佳答案

仅当您不提供 serialVersionUID 时,序列化才会使用类签名来生成版本控制,因为您提供了一个,所以不会使用类签名。

由于它没有改变,它假定两者兼容并执行默认行为

关于java - 为什么即使在不兼容的对象版本之间,java 反/序列化也会成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10654516/

相关文章:

java - maven添加的war依赖没有解决?

c# - 在 C# 中使用枚举值反序列化 Dictionary<string, object>

ruby-on-rails - rails hash.as_json 方法产生带有 bool 值的意外结果

c# - Excel 后期绑定(bind) EntireColumn.NumberFormat

vb6 - 如何使用来自后期绑定(bind) COM 对象的事件?

php - PHP 中的后期静态绑定(bind)到底是什么?

java - 有没有办法让 akka actor 暂停 X 次

java - 无法将角色分配给 GCP 中的服务帐户

java - 如何在android studio中保存System.currentTimeMillis()的值

python - DRF - 编写双嵌套序列化程序的更好方法