もう 1 つの方法は、シリアライゼーション プロキシを使用することです。シリアライゼーション プロキシは、オブジェクトの論理状態でシリアライズされるオブジェクトとはまったく異なるクラスです。オブジェクトの 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 をスローします。シリアライゼーション プロキシ パターンには、通常のシリアライゼーションよりもセキュリティ上の利点もあります。また、いくつかの欠点があります