java对象序列化
对象序列化的概念
- 所谓对象序列化就是指将一个保存的对象变成一个二进制的数据流进行传输。但并不是所有类的对象都可以进行序列化操作,如果一个对象需要被序列化,则对象所在的类必须实现Serializable接口。但是在此接口中并没有定义任何方法,所以此接口和Cloneable接口一样都是作为标示接口出现的。
public class Person implements Serializable{
private String name;
private int age;
public Persion(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return "姓名"+this.name+",年龄"+this.age;
}
}
此时,Person类的对象已经允许被序列化操作了,即变成了二进制的byte流。
如果想要序列化,需要使用ObjectOutputStream类完成。如果想要反序列化,则需要ObjectInputStream类完成。
对象序列化:把Java对象转换为字节序列的过程
- ObjectOutputStream主要是序列化对象的使用,也是一个OutputStream的子类。
pbulic class ObjectOutputStreamDemo{
public static void main(String[] agrs)throws Exception{
Person per=new Person("张三",30);
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("D:"+File.separator+"person.ini")));
oos.writeObject(per);//序列化对象
oos.close();
}
}
反序列化对象:把字节序列恢复为Java对象的过程
- ObjectInputStream就可以完成对象的反序列化功能,方法如下:
构造:public ObjectInputStream(InputStream) throws IoException
读取对象:public final Objecte readObject() throws IOException,ClassNoFoundException
pbulic class ObjectInputStreamDemo{
public static void main(String[] agrs)throws Exception{
ObjectinputStream ois=new ObjectInputStream(new FileInputStream(new File("D:"+File.separator+"person.ini")));
Object obj=ois.readObject();//读取序列化的对象
ois.close();
if(obj instanceof Person){
Person per=(Person)obj;
}
}
}
transient关键字
- 实际上在进行对象序列化的时候,序列化的是类中的属性,每个类的对象只有属性是不同的,但是如果现在有某个属性不希望被序列化下来的话,则可以使用transient关键字。
private transient String name;
private int age;