对象序列化

方式一:实现Serializable接口

 public class Test implements Serializable {
     public int field = 0;
     /* transient修饰不会被序列化 */
     public transient int field2 = 0;
 }

 

方式二:实现Externalizable接口

 public class Test implements Externalizable { 
     public int field = 0;
     public String field2 = null;
 
     @Override
     public void writeExternal(ObjectOutput out) throws IOException {
         // 自定义序列化的方式
         out.writeInt(this.field);
         out.writeObject(this.field2);
     }
 
     @Override
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         // 序列化读取方式
        this.field = in.readInt();
        this.field2 = (String) in.readObject();
     }
 }

写入及读取

 /* 输出流 */
 ObjectOutputStream oos;
 /* 写入对象 */
 oos.writeObject(test); 
 /* 写入基本类型 */
 oos.writeObject(100);
 /* 输入流 */
 ObjectInputStream ois;
 /* 读取对象,必须按顺序读取 */
 Test test = (Test) ois.readObject();
 int a = ois.readInt();

 

其它:
    1、被transient(瞬态)修饰的变量不会被序列化。

    2、被序列化的内容:对象类名、成员变量。

    3、不会被序列号的内容:方法、静态成员变量、瞬态变量。

你可能感兴趣的:(对象序列化)