序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
通过实现Serializable接口来达到目的
transient 修饰的属性,不会被序列化
静态static的属性,不序列化
需要显式的声明serialVersionUID这个属性,如果不声明,java会自动赋值,但会与反序列化时生成的UID不同,会抛出异常
private static final long serialVersionUID = 1L;
序列化会通过反射调用无参数的构造方法创建一个新的对象,对单例进行了破坏
在单例类中添加定义readResolve即可解决
private Object readResolve() { return singleton; }
序列化的文件中的数据为明文存储,存在一定的安全风险,需谨慎使用
方序列化时,如cookie,可能会出现客户端篡改权限的问题
protobuf