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