序列化与反序列化
java对象序列化:将对象转换成字节序列,二进制流;
序列化(Serialize):将JAVA对象写入IO流;
反序列化(Deserialize):从IO恢复该Java;
序列化机制:
- 1、所有保存到磁盘中的对象都有一个序列化编号;
- 2、序列化对象时,先检查该对象是否被序列化过,只有该对象从未在本次虚拟机中被序列化过,系统才将该对象转换为字节序列化并输出;
- 3、如果已经被序列化过,程序只是输出一个序列化编号,不是重新序列化;
自定义序列:
transient
序列化时,不需要对某个成员变量序列化保存,使用transient关键字;
自定义控制各实例:
在实体类中提供相关的方法进行控制,类似与getter与setter方法;
对象替换:
在序列化对象之前先调用相关方法,该方法具有不同的访问权限,在读取或写入时替换相关的对象;
Externalizable:
该接口也可用于序列化,要去实现存储与恢复对象数据时,需要实现相关方法:
readExternal:实现反序列化,调用DataInput恢复;
writeExternal:实现序列化;
实现该接口方法为null时,性能比Serializable稍好一点;
版本:
serialVersionUID:序列化id,如果一个类升级后,serialVersionUID不变,序列化会当作同一个版本;
序列化的好处就是可以跨平台传输,使用java进行序列化时,可以使用其他语言进行反序列化,例如.net、python等