对象的序列化&反序列化
1) 对象序列化: 就是将Object转换成byte序列, 反之叫对象的反序列化
2) 序列化流(ObjectOutputStream) 是过滤流----->writeObject
反序列化流(ObjectInputStream)----->readObject
3) 序列化接口(Serializable)
对象必须实现序列化接口,才能进行序列化,否则将出现异常
这个接口,没有任何方法,只是一个标准
对象的序列化:
//student类需要实现Serializable接口才能序列化
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
Student stu = new Student("10001", "sabot", "16");
oos.writeObject(stu);
oos.flush();
oos.close();
对象的反序列化:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
Student stu;
stu = (Student)ois.readObject();
System.out.println(stu);
ois.close();
4) transient关键字修饰的元素,不会进行默认的序列化
private transient String stuage;
//方法签名
private void writeObject(java.io.ObjectOutputStream out)throws java.io.IOException{
out.defaultWriteObject();//把jvm能默认序列化的元素进行序列化操作
out.writeUTF(stuage);//自己完成stuage的序列化
}
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException{
in.defaultReadObject();//把jvm能默认反序列化的元素进行反序列化
this.stuage = in.readUTF();//自己完成stuage元素的反序列化
}
5) 序列化中 子类和父类构造函数的调用问题
1、一个类实现了序列化接口,那么其子类都可以进行序列化
2、对子类进行序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被调用.