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