just take notes to 'discover the secrets of java serialization.
http://java.sun.com/developer/technicalArticles/Programming/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中对象序列化的默认机制、非序列化字段的处理方法、如何定制序列化过程及实现版本控制等内容。
1602

被折叠的 条评论
为什么被折叠?



