目录

 

一、什么是序列化和反序列化

二、为什么要序列化

三、序列化和反序列化操作

序列化操作

反序列化操作

四、注意


一、什么是序列化和反序列化

序列化就是把对象变成二进制格式的过程。

反序列化就是把二进制格式的对象还原成正常对象的过程。

 

二、为什么要序列化

对象序列化无非两个原因:

1.用于网络传输对象

在一台机子上,有一个JVM,那么在同一个JVM中的不同对象,当然可以随便调用各自的方法。但假设,从分布式而言,北京的一台服务器需要调用广州服务器的一个对象,怎么办,两个服务器有不同的JVM,那这时候只能从广州服务器上把该对象进行序列化,然后通过网络发送到北京服务器,然后再反序列化。

2. 用于把对象保存在硬盘中

对象存在于内存中,内存是关机就掉数据的设备。例如玩游戏,要存档,就可以简单理解为将当前游戏运行的所有对象序列化保存到硬盘上,然后你再次玩的时候,你读取存档,就是反序列化,“再弄出这些对象出来”,继续运行。

 

三、序列化和反序列化操作

1.一个类想要能被序列化,必须实现   java.io.Serializable  这个接口

2.该类的所有属性必须是可序列化的,如果有一个属性不是可序列化的,或者说不想它被序列化,那么可以给这个属性用transient修饰。

一个可被序列化的类如下:

javabean为什么要实现序列化 java对象为什么要序列化_服务器

序列化操作

ObjectOutputStream 类用来序列化一个对象,如下的 SerializeDemo 例子实例化了一个 Employee 对象,并将该对象序列化到一个文件中。

该程序执行后,就创建了一个名为 employee.ser 文件。

注意: 当序列化一个对象到文件时, 按照 Java 的标准约定是给文件一个 .ser 扩展名。

javabean为什么要实现序列化 java对象为什么要序列化_服务器_02

反序列化操作

利用ObjectInputStream类进行反序列化。

javabean为什么要实现序列化 java对象为什么要序列化_服务器_03

四、注意

1.static的变量不能被序列化,因为static的变量是属于类的
2.Transient关键字,主要是控制变量是否能够被序列化。Transient表示临时的意思。