关于Java的序列化的文章在网上已经够多了,在这里写关于Java序列化的文章是对自己关于这方面的的一种总结,结合以前的开发经验与网上的资料,写了这篇文章,对自己是有着巩固记忆的作用,也希望能够对大家有一定帮助。
一、什么是序列化(Serialization)?
序列化是Java提供的一种机制,将对象转化成字节序列,在字节序列中保存了对象的数据、对象的类型的信息与存储在对象中的数据的类型。序列化实际上就是将保存对象的"状态",可以方便以后的程序使用或者通过网络传输到另一台主机使用。一般来说,对象的生成周期取决于程序是否在执行,而序列化能够将对象保存在磁盘或网络中,这样对象就能生存在程序的调用之间。
二、序列化的目的
用序列化来保存对象的状态,主要是为了支持两大特性:
Java的远程方法调用(RMI),它能够存活于其他机器上的对象使用起来就像存活于本地一样。当向远程对象发送消息时,需要通过对象序列化来传输参数和返回值。
在Java Beans中,必须使用对象序列化。
三、序列化基本实例
Java中实现序列化最基本的方法是实现Serializable接口,Serializable接口是标记接口,不包含任何方法。要序列化一个对象,必须先创建某些OutoutStream对象,然后封装到ObjectOutputStream对象内,其中ObjectOutputStream提供writeObject()方法,调用该方法即可将对象序列化。
反序列化是指将对象序列化生成的字节序列还原成对象,需要将InputStream对象封装在ObjectInputStream对象中,然后调用readObject即可读出对象。
下面是对象序列化的基本实例:
class Pet implementsSerializable {
privateString name;
publicPet(String name) {
this.name =name;
}
publicString toString() {
returnname;
}
}
public class Person implementsSerializable {
private static final long serialVersionUID = 1L;
private intage;
privateString name;
privatePet ownPet;
public Person(String name, intage, Pet ownPet) {
this.name =name;
this.age =age;
this.ownPet =ownPet;
}
@Override
publicString toString() {
return "Person [age=" + age + ", name=" + name + ", ownPet=" +ownPet
+ "]";
}
public static void main(String[] args) throwsFileNotFoundException,
IOException, ClassNotFoundExcep