序列化与反序列化
什么是序列化?
序列化机制
序列化机制可以将对象转换成字节序列,这些字节序列可以保存在磁盘上,也可以在网络中传输,并允许程序将这些字节序列再次恢复成原来的对象。
其中,对象的序列化(Serialize)
,是指将一个Java对象写入IO流中
。对象的反序列化(Deserialize)
,则是指从IO流中恢复该Java对象。
Serialize接口
若对象要支持序列化机制,则它的类需要实现Serializable
接口,该接口是一个标记接口,它没有提供任何方法,只是标明该类是可以序列化的,Java的很多类已经实现了Serializable接口,如包装类、String、Date等。
Java原生序列化
若要实现序列化,则需要使用对象流ObjectInputStream
和ObjectOutputStream
。
其中,在序列化时需要调用ObjectOutputStream
对象的writeObject()
方法,以输出对象序列。在反序列化时需要调用ObjectInputStream
对象的readObject()
方法,将对象序列恢复为对象。
(1)想要序列化的对象需要实现
Serializable
接口才可以序列化。
(2)使用transient
标识的对象不参与序列化。
(3)静态成员变量不能被序列化
,因为序列化是针对对象的,而静态成员变量属于类。
1、创建一个实体类User,并且实现Serializable接口
@Data
public class User implements Serializable {
private final static long serialVersionUID = 1L;
private String name;
private String sex;
private Integer age;
}
2、测试对象的序列化与反序列化
public static void main(String[] args) {
// 1.创建要序列化的对象
User user = new User();
user.setName("张三");
user.setSex("男");
user.setAge(18);
ObjectOutputStream oos