1.对象的序列化就是保存对象的当前状态。
2.保存对象的状态有两种主要的方式:
1) 对象序列化(将对象写入到文件,以后再反序列化,见后例)
如果保存的数据用于Java程序内交互,则采用对象的序列化;
2) 写入文件(将对象写入到文本文件,注意,是文本文件)
如果保存的数据用于和其他非Java程序交互,则保存到文本文件。
3.对象如果需要序列化,则它所在的类必须要实现Serializable接口。
如果某类是可序列化的,则它的子类自动地可以序列化。
4.对象序列化的步骤:
1) 创建文件输出流;
2) 创建对象输出流;
3) 写入对象状态;
4) 关闭对象输出流;
import java.io.*;
import java.util.Date;
class Customer implements Serializable {
private String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "name=" + name + ",age=" + age;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("xuliehua.txt"));
// 序列化对象
Customer customer = new Customer("张三", 50);
oos.writeObject(customer);
oos.close();
// 反序列化对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"xuliehua.txt"));
Customer obj3 = (Customer) ois.readObject();
System.out.println("obj3=" + obj3);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.序列化对象会把对象的所有属性保存,被对象的实例变量所引用的对象也会被序列化。
如果某实例变量不能或不应该被序列化,则把这个变量标记为transient。将属性标记为transient后,对象序列化时会将该属性保存为null值。
6.对象解序列化的步骤:
1) 创建文件输入流;
2) 创建对象输入流;
3) 读出对象状态;
4) 转换对象类型(因为对象读出后为Object类型);
5) 关闭对象输入流;