Java的对象序列化用于将一个实现了Serializable接口的对象转换成一组byte,这样以后要用这个对象时候,就能把这些byte数据恢复出来,并据此重新构建那个对象。这一点甚至在跨网络的环境下也是如此,这意味着序列化机制能自动补偿操作系统方面的差异。也就是说,可以在Windows机器上创建一个对象,序列化之后,再通过网络传到Unix机器上,然后在那里进行重建,而不用担心在不同的平台上数据是怎样表示的,byte顺序怎样,或者别的什么细节。
Java序列化技术可以将一个对象的状态写入一个byte流里,并且可以从其他地方把该byte流里的数据读出来,重新构造一个相同的对象。这种机制允许将对象通过网络进行传播,并可以随时把对象存储到数据库、文件等系统里。Java的序列化机制是RMI、EJB、JNNI等技术的技术基础。
并非所有的Java类都可以序列化,为了使指定的类可以实现序列化,必须使该类实现接口java.io.Serializable。需要注意的是,该接口什么方法也没有。实现该类只是简单的标记该类准备支持序列化功能。
在Java程序中,一般情况下,创建的对象随程序的终止而消失。但有些时候,希望把创建的某些对象完整地保留下来,以后再次使用。比如创建一个描述学生数据的类对象(其中包括帐号数据),如下。
public class Student{
int id;
String name;
int age;
}
希望把这个类的一个实例保存在本地硬盘上,供以后的程序使用,或者保存在网络上的一台远程机器上,把这个对象提供给那台主机中的程序使用,这可以为许多程序提供很多的方便。
JAVA中可以通过对象的序列化来实现这个功能。序列化是指对象通过把自己转化为一系列字节,记录字节的状态数据,以便再次利用。