对象序列化
2021年7月15日大约 2 分钟约 488 字
1. 对象序列化概念
对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。序列化机制使得对象可以脱离程序的运行而独立存在。
对象序列化机制允许把内存中的 Java 对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流,都可以将其恢复成原来的 Java 对象。
对象的序列化(Serialize) 指将一个Java对象写入IO流中,对象的反序列化(Deserialize) 则指从IO流中恢复该Java对象。
2. Java对象序列化
在 Java 里为了安全起见,并不是所有类都支持序列化的。
所有的 transient
和 static
类型的变量都是不序列化的,因为它不属于对象而属于类。
如果需要让某个对象支持序列化机制,必须让它的类是可序列化的(serializable),为了让某个类是可序列化的,该类必须实现如下两个接口之一:
Serializable
:Java 的很多类已经实现了Serializable
,该接口是一个标记接口,实现该接口无须实现任何方法,它只是表明该类的实例是可序列化的。Externalizable
:这个接口可以控制对象的读写,实现加密。Externalizable
接口含两个方法,分别为writeExternal
与readExternal
,它们应该是对应的。
必须指出,反序列化读取的仅仅是 Java 对象的数据,而不是 Java 类,因此采用反序列化恢复 Java 对象时,必须提供该 Java 对象所属类的 class 文件,否则将会引发 ClassNotFoundException
异常。
Java 对象序列化主要涉及 ObjectInputStream/ObjectOutputSteam
两个流。