- serialVersionUID
该字段如果如果自己不设定,编译器会根据类的信息自动帮你设定
ObjectInputStream.readObject()时会检验当前序列化文件中的serialVersionUID与本环境中序列化文件中对应类serialVersionUID是否一致
- Serializable接口
如果父类没有实现该接口,那么父类中的字段默认为null或0
- transient关键字
默认的序列化方法不会序列化该关键字,除非在自定义的序列化流程中手动指定。
只有对象的变量会被序列化。
- 如何自定义序列化
自定义序列化是由ObjectInput/OutputStream在序列化/反序列化时候通过反射
检查该类是否存在以下方法(0个或多个):执行顺序从上往下,序列化调用
1和2,反序列调用3和4;transient关键字当某个字段被声明为transient后,默
认序列化机制就会忽略该字段。
1. Object writeReplace() throws ObjectStreamException;可以通过此方法修改序列化的对象
2. void writeObject(java.io.ObjectOutputStream out) throws IOException; 方法中
调用defaultWriteObject() 使用writeObject的默认的序列化方式,除此之外可
以加上一些其他的操作,如添加额外的序列化对象到输出:out.writeObject("XX")
3. void readObject(java.io.ObjectInputStream in) throws Exception; 方法中调用
defaultReadObject()使用readObject默认的反序列化方式,除此之外可以加
上一些其他的操作,如读入额外的序列化对象到输入:in.readObject()
4.Object readResolve() throws ObjectStreamException;可以通过此方法修改返回的对象
具体步骤见链接:https://www.cnblogs.com/yoohot/p/6019767.html