序列化是什么?
序列化是把Java对象转化为可存储的信息保存到文件中的过程, 序列化Serialization在Java中,我们一般需要将保存到本地或者在网络中传输的对象,继承Serializable接口,以实现将对象序列化的目的。
反序列化是什么?
既然序列化是将对象转化为可存储的信息保存到文件中的过程,那么反序列化就是把文件中的Java对象读取到Java程序中的过程。
为什么要序列化?
因为在Java的使用中,经常会需要把Java对象保存到文件中以实现Session共享;或者将Java数据临时存储为文件,以防止因为非人为因素造成的不可逆转的损失;或者在网络传输中,我们需要对Java对象在网络间实现传输,这些就需要对Java对象进行序列化操作。实际使用中,需要实现序列化的原因很多,我这里就暂时列举这几种。
如何序列化?
继承Serializable接口,使用Java类ObjectOutputStream(序列化) , ObjectInputStream(反序列化)进行序列化,相关的例子有:
继承Serializable接口的Colleague类
public class Colleague implements Serializable { private static final long serialVersionUID = 888999L; //被static修饰的成员变量在序列化时不会保存到文件中 private String id; private transient int sage; //如果不想序列化该字段,就需要添加transient修饰 private String sname; private double department;
使用Java类ObjectOutputStream进行序列化,注意捕获异常NotSerializableException,IOException
Colleague colleague = new Colleague (); ObjectOutputStream testoos = new ObjectOutputStream(new FileOutputStream(“testColeague.txt”)); testoos .writeObject(colleague ); testoos .close();
使用Java类ObjectInputStream进行反序列化,注意捕获异常IOException,ClassNotFoundException
ObjectInputStream oistest = new ObjectInputStream(new FileInputStream(“testColeague.txtt”)); Colleague colleague = (Colleague)oistest .readObject(); System.out.println("Colleague = " + colleague.toString() ); oistest .close();
序列化的注意事项:
1 序列化只会保存Java对象当时的状态,但是不会保存对象里面的方法的
2 序列化是可以传递的,如果父类实现了序列化接口,那么子类也就可以进行序列化操作
3 序列化的对象引用了其他对象,尽管这个其他对象没有实现序列化接口,但是序列化的对象在序列化的时候还是会对这个被引用的对象进行序列化