序列化即将对象转换为字节序列,反序列化即将字节序列转换为对象
实现Serializable接口表明可以序列化/反序列化
public class User implements Serializable {
private static final long serialVersionUID = -969482712208278073L;
private String name;
}
通过ObjectInputStream,ObjectOutputStream直接读写对象
serialVersionUID是根据类名,接口名,成员方法以及属性等生成的一个哈希字段
当你的类属性,接口等发生改变时serialVersionUID也会发生改变
反序列化时首先检查该类是否存在,其次检查serialVersionUID是否一致,如果不一致就会反序列化失败
如果不手动指定序列化serialVersionUID,每次编译JVM都会根据类名,接口名成员方法,属性等自动生成序列化serialVersionUID,当你的类发生改变,之前的序列化数据就无法反序列化了(serialVersionUID发生了改变)
手动指定序列化serialVersionUID之后,当你的类发生改变时(如添加属性)旧的序列化数据仍然可以反序列化,旧的数据得到了保存
transient瞬间变量不受影响
public class Student implements Externalizable {
private String name;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
}
}
原文:https://www.cnblogs.com/redo19990701/p/12740674.html