При записи
Serializable класса весь контроль над сериализацией достается JVM. С помощью определения
специальных методов можно кастомизировать его части. Метод
readObject при этом обычно начинается с вызова стандартной части сериализации –
ObjectInputStream.defaultReadObject().
Интерфейс
Externalizable расширяет
Serializable и добавляет методы записи и чтения
writeExternal и
readExternal. Входной и выходной потоки-аргументы в них представлены более абстрактно чем в специальных методах – интерфейсами
ObjectInput и
ObjectOutput.
Этот интерфейс позволяет реализовать
полностью свой механизм сериализации, стандартно запишется только идентификатор класса. Никакой автоматической работы с классом-родителем также не предусмотрено. Методы
readObject и
writeObject игнорируются. Ключевое слово
transient эффекта на
Externalizable не имеет.
Externalizable объект в отличие от
Serializable десерализуется не в обход конструктора, так что должен иметь конструктор без аргументов.
Подробнее читайте в соответствующем
вопросе на stackoverflow.