1. Внутри целевого класса объявляется вложенный класс-посредник;
2. В посреднике объявляются поля, описывающие логическую структуру объекта (собственно, сериализационную форму);
3. Добавляется конструктор посредника, принимающий экземпляр оригинального класса и инициализирующий все эти поля;
4. Оба класса помечаются интерфейсом
Serializable;5. В методе
writeReplace оригинального класса инстанциируется и возвращается прокси от this;6. Симметричные действия совершаются для чтения – в классе-посреднике реализуется метод
readResolve;7. В основном классе добавляется
readObject, который выбрасывает исключение – это защитит от чтения без прокси.Пример кода реализации.