Java的序列化与反序列化

Java在运行中,将内存中变量状态持久化至硬盘中,叫做序列化;相反的,将硬盘中的文件读取到内存中,叫做反序列化。

若实现的是Serializable接口,则所有的序列化将会自动进行;
若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关


Serializable interface

需要实现序列化的class需要implements一个interface:java.io.Serializable.
然后生成serialVersionUID.
在IDEA中生成serialVersionUID需要安装插件”GenerateSerialVersionUID”,然后使用插件生成即可.
private static final long serialVersionUID = 1L;


具体实现Demo


对于不希望序列化变量的保护

transient序列化对象的时候,这个属性就不会被序列化
transient关键字只能修饰变量,而不能修饰方法和类
一个静态变量不管是否被transient修饰,均不能被序列化