JAVA序列化Serializable与Externalizable的区别

2014-11-20 14:07:21 · 作者: · 浏览: 19

  大家都知道Serializable是一个mark interface,告诉JVM这个对象可以被转换成二进制流来传输.


  但是Serializable与Externalizable的转换二进制流的过程是不一样的.


  Serializable 在我们实现这个接口的时候,我们可以使用4个私有方法来控制序列化的过程:


  我们来看一个例子:


  Java代码


  public class FooImpl implements java.io.Serializable{


  private String message;


  public String getFoo() {


  return message;


  }


  public void setMessage(String message) {


  this.message = message;


  }


  private void writeObject(java.io.ObjectOutputStream out) throws IOException {


  System.out.println("writeObject invoked");


  out.writeObject(this.message == null "hohohahaha" : this.message);


  }


  private void readObject(java.io.ObjectInputStream in) throws IOException,


  ClassNotFoundException {


  System.out.println("readObject invoked");


  this.message = (String) in.readObject();


  System.out.println("got message:" + message);


  }


  private Object writeReplace() throws ObjectStreamException {


  System.out.println("writeReplace invoked");


  return this;


  }


  private Object readResolve() throws ObjectStreamException {


  System.out.println("readResolve invoked");


  return this;


  }