Serializable是Java所提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作。
想让一个对象实现序列化,只需要这个类实现Serializable 接口并声明一个serialVersionUID即可,实际上,甚至这个serialVersionUID也不是必需的,我们不声明这个serialVersionUID同样也可以实现序列化,但是这将会对反序列化过程产生影响。
//序列化过程
User user=new User(0,"jake",true);
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("cache.txt"));
out.writeObject(user);
out.close();
//反序列化过程
ObjectInputStream in=new ObjectInputStream(new FileInputStream("cache.txt"));
User newUser=(User)in.readObject();
in.close();
采用Serializable方式序列化对象的典型过程,很简单,只需要把实现了Serializable接口的User对象写到文件中就可以快速恢复了,恢复后的对象newUser和user的内容完全一样,但是两者并不是同一个对象。
这个serialVersionUID是用来辅助序列化和反序列化过程的,原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能够正常地被反序列化。
系统的默认序列化过程也是可以改变的,通过实现如下两个方法可重写系统默认的序列化和反序列化过程。
private void writeObject(java.io.ObjectOutputStream out)throws IOException{
//write 'this' to 'out'
}
private void readObject(java.io.ObjectInputStream in)throws IOException,ClassNotFoundException{
//pupulate the fields of 'this' from the data in 'in'...
}