概述:当一个类实现了Serializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列。序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列,可以把该字节序列保存起来(例如:保存在一个文件里),以后可以随时将该字节序列恢复为原来的对象。甚至可以将该字节序列放到其他计算机上或者通过网络传输到其他计算机上恢复,只要该计算机平台存在相应的类就可以正常恢复为原来的对象。
序列化的作用:为了保存在内存中各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。
什么情况需要序列化:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
怎么序列化:调用ObjectOutputStream的writeObject
FileOutputStream fs = new FileOutputStream("test.war");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(teacher);
os.close();
怎样反序列化:调用ObjectInputStream的readObject()
ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.war")) ;
Teacher teacher = (Teacher) in.readObject() ;
in.close();
System.out.println("---------"+teacher.getName());
System.out.println("---------"+teacher.getAge());
注:序列化会将对象的所有字段都序列化,所以如果某些字段不需要序列化就需加关键字transient
一个类继承了Serializable接口,强烈建议 所有可序列化类都显式声明 serialVersionUID 值