1、什么是对象的序列化(Serialize)?为什么要实现对象的序列化?
序列化是指将对象的状态信息转换为可以存储或传输的形式(2进制数据)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化的目的:
1)永久的保存对象,保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化对象在进程间传递对象。
2、ObjectInputStream类 和ObjectOutputStream类
如果我们想要序列化一个对象,如我们自定义的User类的对象,那么这个对象必须实现Serializable接口。Serializable接口没有任何的抽象方法,实现这个接口仅仅是为了通知编译器已这个对象将要被序列化,所以此接口仅仅是一个表示接口。类似的用法还有Cloneable接口,实现这个接口也只是起到通知编译器的作用。
3.对象的序列化和反序列化
想要完成对象的输入输出,还必须依靠ObjectInputStream和ObjectOutputStream;
使用ObjectOutPutStream输出对象的流程成为序列化对象,使用ObjectInputStream输入流读取对象的过程称为反序列化。
4.到底序列化了哪些东西呢?
所有的对象拥有各自的属性值,但是所有的方法都是公共的,所以序列化对象的时候实际上序列化的就是属性。
简单例子:
//在使用Object流时,需要先将Object写入文件再读取
public class Demo13 {
public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO Auto-generated method stub
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("F:\\M.txt"));
oos.writeObject(new Obj());
oos.flush();
oos.close();
}
}
class Obj implements Serializable{
private static final long serialVersionUID = 1L;
}