java 使用不同的 jvm 版本序列化和反序列化对象
java serializing and deserializing object with different jvm versions
我有一个带有 java8 的远程系统,它通过网络发送和接收序列化的 java dto 与另一个系统(希望 java17)交互。
每个 java class 都有自己的 serialVersionUID,但我不确定当较新的 jvm 尝试反序列化由明显较旧的 jvm 序列化的对象时是否会出现错误。或者它应该向后兼容?
澄清一下,这是通过实现 java.io.Serializable 接口完成的二进制序列化。
Java 版本没有任何影响。如果被序列化的 classes 在两个系统之间没有不兼容的变化(在最好的情况下它们是相同的 class,但序列化也允许发生一些变化),那么你就不会没有任何兼容性问题。
只有当一方有不同的 class 版本并且他们不是 compatible 时,您才需要执行手动工作(例如工具 Externalizable
)。否则序列化是向后兼容的,尽管有其他原因可能不是使用它的好理由(例如它非常 Java 具体)。
我有一个带有 java8 的远程系统,它通过网络发送和接收序列化的 java dto 与另一个系统(希望 java17)交互。 每个 java class 都有自己的 serialVersionUID,但我不确定当较新的 jvm 尝试反序列化由明显较旧的 jvm 序列化的对象时是否会出现错误。或者它应该向后兼容?
澄清一下,这是通过实现 java.io.Serializable 接口完成的二进制序列化。
Java 版本没有任何影响。如果被序列化的 classes 在两个系统之间没有不兼容的变化(在最好的情况下它们是相同的 class,但序列化也允许发生一些变化),那么你就不会没有任何兼容性问题。
只有当一方有不同的 class 版本并且他们不是 compatible 时,您才需要执行手动工作(例如工具 Externalizable
)。否则序列化是向后兼容的,尽管有其他原因可能不是使用它的好理由(例如它非常 Java 具体)。