1.串行化能保存的元素

  只能保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符,都不能保存。

 2.transient关键字
 
  对于某些类型的对象,其状态是瞬时的,这样的对象是无法保存其状态的,例如一个Thread对象,或一个FileInputStream对象,对于这些字段,我们必须用transient关键字标明

 3. 定制串行化

  缺省的串行化机制,对象串行化首先写入类数据和类字段的信息,然后按照名称的上升排列顺序写入其数值。如果想自己明确地控制这些数值的写入顺序和写入种类,必须定义自己的读取数据流的方式。就是在类的定义中重写writeObject()和readObject()方法。

  例如可在4.8.2的例子中,加入重写的writeObject()和readObject()方法,对Student 类定制其串行化。

  private void writeObject(ObjectOutputStream out)throws IOException
  {
    out.writeInt(id);
    out.writeInt(age);
    out.writeUTF(name);
    out.writeUTF(department);
  }
  private void readObject(ObjectInputStream in)throws IOException
  {
    id=in.readInt();
    age=in.readInt();
    name=in.readUTF();
    department=in.readUTF();
  }