目录
1、对象序列化基本概念
2、序列化操作
3、反序列化
4、transient关键字
5、总结
对象序列化指的是将在内存中保存的对象变为二进制数据流,这样对象可以保存在文件中或进行各种传输操作。要让类对象可被序列化,需要实现java.io.Serializable接口,此接口没有方法定义,属于标识接口。
eg:定义一个可被序列化的类
class Person implements Serializable{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
如上,只是实现了Serializable接口,Per'son类对象就可以被传输或保存在文件中了。
依靠java.io.ObjecetOutputStream类进行对象的序列化操作,其为OutputStream的子类,
构造方法:public ObjectOutputStream(OutputStream out) throws IOException,取得ObjecetOutputStream类的实例化对象后,即可进行序列化操作。
利用输出对象方法:public final void writeObject(Object obj) throws IOException
eg:实现Person类对象的序列化
private void ser(Person person) throws Exception{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E"+ File.separator+"person.ser"));
oos.writeObject(person);
oos.close();
}
利用ObjecetOutputStream输出的文件信息为二进制数据,看不懂,只能利用ObjecetInputStream类进行反序列化操作读取。其为InputStream的子类,
构造方法:public ObjectInputStream(InputStream out) throws IOException,取得ObjecetInputStream类的实例化对象后,即可进行反序列化操作。
利用方法:public final void readObject(Object obj) throws IOException
eg:实现Person类对象的反序列化
private void dser() throws Exception{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E"+ File.separator+"person.ser"));
Object obj = ois.readObject();
System.out.println(obj);
ois.close();
}
可通过transient关键字定义实现类的某些属性不实现序列化。
private transient String name;
1)要实现类对象的序列化,只需要实现Serializable接口,几乎简单Java类都有实现此接口;
2)ObjectOutputSream、ObjectInputStream很少由用户自己操作;
3)transient可保证属性不被序列化,但是用的很少。
作于202003022132,已归档