private transient Book book;//用transient关键字声明book
//这个方法会在序列化的过程中被调用
private void writeObject(ObjectOutputStream out){
try {
out.defaultWriteObject(); //这个方法会把这当前中非静态变量和非transient变量写到流中
//在这里我们就把name写到了流中。
//因为我们要保存Book的状态,所以我们还要想办法把其状态写入流中
out.writeInt(book.getIsbn());//ObjectOutputStream中提供了写基本类型数据的方法
//out.close();//注意,这句千万不能有,否刚将直接导致写入失败
} catch (IOException e) {
e.printStackTrace();
}
}
//这个方法会在反序列化的过程中被调用
private void readObject(ObjectInputStream in){
try {
in.defaultReadObject(); //和defaultWriteObject()方法相对应,默认的反序列化方法,会从流中读取
//非静态变量和非transient变量
int isbn = in.readInt(); //用这个方法来读取一个int型值,这里我们是读取书号
book = new Book(isbn); //这里我们就通过读取的 保存的状态构造 了一个和原来一样的Book对象
//in.close();同样的这句也不能有
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} 原文:http://blog.csdn.net/tayanxunhua/article/details/20119809