Serializable,Java的一个接口,用来完成java的序列化和反序列化操作的;任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中;java序列化是指把java对象转换为字节序列的过程,而java反序列化是指把字节序列恢复为java对象的过程.
private static final long serialVersionUID = 1L;
是 Java 中的一个序列化id。在Java应用程序中,当对象需要被序列化成字节流并在网络或磁盘中传输时,它们需要具有一个唯一的序列化 id。这个 id 用于在反序列化过程中确定对象是否与旧版本兼容。这个 id 被用于序列化和反序列化 Java 对象,以便确保版本之间的兼容性。
当一个实现了 Serializable
接口的 Java 类被编译时,如果它还没有给出 serialVersionUID 的值,则编译器会自动生成一个 serialVersionUID,这个 serialVersionUID 的具体值是根据类的成员变量、方法等特征算出的。可以通过 Java 命令 jdk自带的命令 serialver
来生成,示例如下:
如果不指定 serialVersionUID,则每次类的实现变化都将会产生新的 serialVersionUID。这将导致在反序列化时可能会发生不兼容的错误。
因此,我们在实现 Serializable
接口的 Java 类中通常要显式声明 serialVersionUID 的值,以便在类的实现发生改变时保持 serialVersionUID 的稳定性,以便保证对象序列化和反序列化的正确性。private static final long serialVersionUID = 1L;
这个语句即为给定一个 serialVersionUID 的值为 1L,这个值一个类必须有,它也必须是一个 long 类型常量,且如果类的实现发生变化,则 serialVersionUID 也需要相应地修改。