just take notes to 'discover the secrets of java serialization.
Rule #1: The object to be persisted must implement the
interface or inherit that implementation from its object hierarchy.
to actually persist the object, use ObjectOutputStream.writeObject();
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
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;
classes are automatically given a unique identifier. The identifier that is part of
all classes is maintained in a field called
If you wish to control versioning, you simply have to provide the
field manually and ensure it is always the same, no matter what changes you make to
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
interface. A complete list of compatible and incompatible
changes is given in the Java Serialization Specification.