含义
序列化将对象的状态信息转换为可以存储或传输的形式的过程
概念
把数据结构或对象转换为字节序列(二进制字节流)的过程称为对象的序列化
把序列化过程中所生成的字节序列(二进制字节流)恢复为数据结构或对象的过程称为对象的反序列化
序列化和反序列化常见应用场景
- 对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化
- 将对象存储到文件之前需要进行序列化,将对象从文件中读取出来需要进行反序列化
- 将对象存储到数据库(如 Redis)之前需要用到序列化,将对象从缓存数据库中读取出来需要反序列化
- 将对象存储到内存之前需要进行序列化,从内存中读取出来之后需要进行反序列化
对象的序列化主要作用
- 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件当中
- 通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中
序列化操作的具体过程
序列化操作的时候系统会把当前类的SerialVersionUID写入序列化文件当中,当反序列化时系统会去检测文件中的SerialVersionUID,判断它是否与当前类的serialVersionUID一致,如果一致就说明序列化类的版本与当前类版本是一样的,可以反序列化成功,否则失败
如果有些字段不想进行序列化怎么办
对于不想进行序列化的变量,可以使用 transient 关键字修饰。
transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化时,transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方法