目录
一、什么是序列化和反序列化
二、为什么要序列化
三、序列化和反序列化操作
序列化操作
反序列化操作
四、注意
一、什么是序列化和反序列化
序列化就是把对象变成二进制格式的过程。
反序列化就是把二进制格式的对象还原成正常对象的过程。
二、为什么要序列化
对象序列化无非两个原因:
1.用于网络传输对象
在一台机子上,有一个JVM,那么在同一个JVM中的不同对象,当然可以随便调用各自的方法。但假设,从分布式而言,北京的一台服务器需要调用广州服务器的一个对象,怎么办,两个服务器有不同的JVM,那这时候只能从广州服务器上把该对象进行序列化,然后通过网络发送到北京服务器,然后再反序列化。
2. 用于把对象保存在硬盘中
对象存在于内存中,内存是关机就掉数据的设备。例如玩游戏,要存档,就可以简单理解为将当前游戏运行的所有对象序列化保存到硬盘上,然后你再次玩的时候,你读取存档,就是反序列化,“再弄出这些对象出来”,继续运行。
三、序列化和反序列化操作
1.一个类想要能被序列化,必须实现 java.io.Serializable 这个接口
2.该类的所有属性必须是可序列化的,如果有一个属性不是可序列化的,或者说不想它被序列化,那么可以给这个属性用transient修饰。
一个可被序列化的类如下:
序列化操作
ObjectOutputStream 类用来序列化一个对象,如下的 SerializeDemo 例子实例化了一个 Employee 对象,并将该对象序列化到一个文件中。
该程序执行后,就创建了一个名为 employee.ser 文件。
注意: 当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名。
反序列化操作
利用ObjectInputStream类进行反序列化。
四、注意
1.static的变量不能被序列化,因为static的变量是属于类的
2.Transient关键字,主要是控制变量是否能够被序列化。Transient表示临时的意思。