java serialization




just take notes to 'discover the secrets of java serialization.


Default Mechanism:

Rule #1: The object to be persisted must implement the Serializable interface or inherit that implementation from its object hierarchy.

to actually persist the object, use ObjectOutputStream.writeObject();


Nonserializable object:

when a field we don't want to serialize, e.g, thread, OutputStream, socket, follow the rules:

Rule #2: The object to be persisted must mark all nonserializable fields transient


Customize the protocol

when want to recover the state like thread, can use this:

  • private void writeObject(ObjectOutputStream out) throws IOException;
  • private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

Create your own protocol

you can implement Externalizable interface to build your own protocol

  • public void writeExternal(ObjectOutput out) throws IOException;
  • public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;

Version Control

all persistent-capable classes are automatically given a unique identifier. The identifier that is part of all classes is maintained in a field called serialVersionUID . If you wish to control versioning, you simply have to provide the serialVersionUID field manually and ensure it is always the same, no matter what changes you make to the classfile.

The version control works great as long as the changes are compatible. Compatible changes include adding or removing a method or a field. Incompatible changes include changing an object's hierarchy or removing the implementation of the Serializable interface. A complete list of compatible and incompatible changes is given in the Java Serialization Specification.

文章标签: Java Socket thread SUN
个人分类: java
想对作者说点什么? 我来说一句