序列化是什么?有什么用?

序列化是什么?反序列化?

序列化:将对象转换为字节的序列的过程叫做对象的反序列化。

反序列化:把字节序列恢复为对象的过程称为对象的反序列化。


transient 字段不会参与序列化

static 字段也不会参与序列化 只会读取静态资源

其中需要序列化的类需要实现Serializable接口


serialVersionUID是什么?有什么用?

serialVersionUID是Java序列化机制中用来标识类版本的一个唯一标识符。它是Serializable接口的一部分,用于在序列化和反序列化过程中验证类的一致性。

serialVersionUID是一个静态的、最终的long类型字段

1
2
3
4
5
6
7
8
9
10
11
12
13
public class User implements Serializable {
private String userName;
private String password;

private transient String creditCarNumber;
//
@Serial
private static final long serialVersionUID = 2L;
public User(String userName, String password, String creditCarNumber) {
this.userName = userName;
this.password = password;
this.creditCarNumber = creditCarNumber;
}

关于***@Serial写不写的可选性,用来表明是序列化的,主要目的是提高代码的可读性和确保方法签名的正确,在使用序列化操作时,推荐加上@Serial***。

回到正题

serialVersionUID是来标识版本号的,在序列化的时候加上是一个静态的最终的long类型,推荐手动导入,如果不导入,Java编译器会根据类的结构自动生成一个UID来对应,但是编译器在不同的编译器版本中或环境中不一致,所以推荐手动加入。

1
private  static final long seriaVersionUID = 182938012841L;

总结

了解序列化,反序列化,以及transient以及static的相关事项,以及seriaVersionUID的用法,强烈推荐手动加入。