Java 的 serialization 提供了一种持久化对象实例的机制。当持久化一个对象时,可能并不想持久化所有的属性。对于这种情况,可以通过在属性前加上关键字transient 来实现。
例如以下代码是 SuperClass 和 Sub 两个类的定义。在序列化一个 Sub 的对象 Sub 到文件时,只有 radius 会被保存到文件中。Java 代码如下:
class SuperClass {
public String name;
}
class Sub extends SuperClass implements Serializable {
private float radius;
transient int color;
public static String type = "Sub";
}
在分布式环境下,当进行远程通信时,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。
序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。
序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要的时候把该流读取出来重新构造成一个相同的对象。
如何实现序列化呢?其实,所有要实现序列化的类都必须实现Serializable接口,Serializable 接口位于 java.lang 包中,它里面没有包含任何方法。使用一个输出流(例如 FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,紧接着,使用该对象的 writeObject(Object obj)方法就可以将 obj 对象写出(即保存其状态),要恢复的时候可以使用其对应的输入流。
序列化有如下几个特点: