class Page { ... // protected Object writeReplace() throws ObjectStreamException // { // IPageSerializer ps = (IPageSerializer)serializer.get(); // if (ps != null) // { // return ps.serializePage(this); // } // return this; // } private Page pageToResolve = null; protected Object readResolve() throws ObjectStreamException { if (pageToResolve == null) { return this; } else { Page page = pageToResolve; pageToResolve = null; return page; } } private void writeObject(java.io.ObjectOutputStream s) throws IOException { s.writeShort(numericId); s.writeObject(pageMapName); Object object; IPageSerializer ps = (IPageSerializer)serializer.get(); if (ps != null && (object = ps.serializePage(this)) instanceof FilePageStore.PageHolder) { s.writeBoolean(true); s.writeObject(object); return; } s.writeBoolean(false); s.defaultWriteObject(); } private void readObject(java.io.ObjectInputStream s) throws IOException, ClassNotFoundException { int id = s.readShort(); String name = (String)s.readObject(); IPageSerializer ps = (IPageSerializer)serializer.get(); if (ps != null) { ps.deserializePage(id, name, this); } boolean b = s.readBoolean(); if (b == false) { s.defaultReadObject(); } else { pageToResolve = (Page) s.readObject(); } } ... }