另一种方法是使用序列化代理。序列化代理与使用对象的逻辑状态序列化的对象完全不同。Object readResolve() 方法写一个代理而不是这个对象,并通过读取代理创建一个对象。
一些半伪代码:
class Message implements Serializable {
private Date dt;
private TibrvMsg msg;
private Object writeReplace() {
return new Proxy(this);
}
private static class Proxy implements Serializable {
private Date dt;
private Map msgData;
Proxy(Message msg) {
this.dt = msg.dt;
this.msgData = doTransform(msg.msg, "UTF-16");
}
private Object readResolve() {
Message msg = new Message();
msg.dtd = dt;
msg.msg = asTibrvMsg(msgData);
return msg;
}
}
}
另外覆盖 readObject(ObjectInputStream) 以引发 InvalidObjectException。序列化代理模式也比普通序列化具有一定的安全优势。它也有一些缺点