对象序列化:
对象序列化是指将一个对象转化为二进制的byte流。
存在如下情况:
将对象保存在文件上的操作称为对象的序列化。
将对象从文件中恢复称为反序列操作。
使用ObjectOutPutStream类实现对象的序列化,使用ObjectInputStream类实现反序列化。
被序列化对象所在的类必须实现java.io.Serializable接口。
对象序列化就是对象持久化的一种方法,它是将一个对象的属性和方法转化为一种序列化的格式以用于存储和传输,反序列化就是根据这些信息重建对象的过程。
不是所有的对象都能序列化
ObjectOutPutStream &&objectInputStream 的使用
实例如下:
首先创建一个类(Dog类)完成基本属性,方法。
OutputStream out = new FileOutputStream("obj.tmp");
// 根据字节输出流构造一个对象流
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeInt(106);
Dog d= new Dog(3,"JACK");
oos.writeObject(d);//想向文件中写入对象
System.out.println("done!!!!!!");
oos.close();
out.close();
完成此步操作,即完成了序列化的操作。对象将被存入文件。
反序列化:
ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.tmp"));
// 读取时候必须按照存入的顺序
int num = in.readInt();
Dog d =(Dog)in.readObject();
System.out.println("num="+num+"dog"+d);
in.close();
readObject读取对象,将其强转为需要反序列化的类,此时就可以得到序列化之前的信息,完成了反序列化。
序列化一组对象:
在序列化操作中,同时序列化多个对象时,反序列化也必须按照顺序操作如果序列化一组对象可采用:对象数组的形式,因为对象数组可以向Object进行转型操作。
如下:
Dog []dogs = {new Dog(3,"JACK"),new Dog(4,"MARK"),new Dog(3,"CENDY")};
oos.writeObject(dogs);//一次性将对象数组写入
在反序类化的时候,可以将对象将其强转为对象数组,即完成反序列化过程。
Trainsient 关键字
如果用transient声明一个实例变量,当对象存储的时候,它的值不需要维持。
当持久化对象时,可能有一个特殊对象的数据成员,不需要序列化机制来保存,为了在一个特定对象的一个域上关闭序列化,可以在其前加上关键字transient,当一个对象被序列化的时候,transient型的变量值不包括在序列化的表示中 ,非transient型的变量是被包括进去的。