Java 序列化:SerialVersionUID生成过程

Java 序列化:SerialVersionUID生成过程,java,serialization,Java,Serialization,如果我们正在将对象的状态从机器A传输到机器B,则只有当两台机器都具有所传输对象所属类的相同SerialVersion UID时,成功的序列化/反序列化才会起作用 我想知道,如果串行版本UID的生成是由JVM完成的,那么在启动序列化过程之前,如何确保机器A和B上的UID相同?首先,不要使用Java序列化。列表中唯一红色突出显示的文本为 注意:反序列化不受信任的数据本质上是危险的,并且 应该避免 要确保ID相同,请在类中定义serialVersionUID @Serial private stati

如果我们正在将对象的状态从机器A传输到机器B,则只有当两台机器都具有所传输对象所属类的相同SerialVersion UID时,成功的序列化/反序列化才会起作用


我想知道,如果串行版本UID的生成是由JVM完成的,那么在启动序列化过程之前,如何确保机器A和B上的UID相同?

首先,不要使用Java序列化。列表中唯一红色突出显示的文本为

注意:反序列化不受信任的数据本质上是危险的,并且 应该避免

要确保ID相同,请在类中定义
serialVersionUID

@Serial private static final long serialVersionUID = 1L;
@Serial
是从当前版本的Java、Java SE 14开始的。)


要查找ID,首先查找
SerialVersionID
,如果不存在,则按照文档中的指定(类的公共方法和字段的散列)进行计算。

首先,不要使用Java序列化。列表中唯一红色突出显示的文本为

注意:反序列化不受信任的数据本质上是危险的,并且 应该避免

要确保ID相同,请在类中定义
serialVersionUID

@Serial private static final long serialVersionUID = 1L;
@Serial
是从当前版本的Java、Java SE 14开始的。)


要查找ID,首先查找
SerialVersionID
,如果不存在,则按照文档中的指定(类的公共方法和字段的散列)进行计算。

Java序列化文档中提出了问题,简短回答,强烈建议您声明自己的JVM序列号,类型为long static和final,如果可序列化类未显式声明serialVersionUID,则序列化运行时将根据该类的各个方面计算该类的默认serialVersionUID值

@Serial private static final long serialVersionUID = 1L;

JVM负责检查并确保序列化对象的UID与反序列化对象的UID相同。

Java序列化文档中有一个问题,简短回答,强烈建议您声明自己的JVM序列号,类型为long static和final,如果可序列化类未显式声明serialVersionUID,则序列化运行时将根据该类的各个方面计算该类的默认serialVersionUID值

@Serial private static final long serialVersionUID = 1L;
JVM负责检查并确保序列化对象的UID与反序列化时的UID相同