Сталкивался ли с Externalizable

«Сталкивался ли с Externalizable» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, сталкивался. Externalizable — это интерфейс, расширяющий Serializable, который позволяет полностью контролировать процесс сериализации/десериализации. В отличие от Serializable, где процесс автоматический, здесь нужно явно реализовать методы writeExternal() и readExternal().

Пример:

class User : Externalizable {
    var name: String = ""
    var age: Int = 0

    override fun writeExternal(out: ObjectOutput) {
        out.writeUTF(name)
        out.writeInt(age)
    }

    override fun readExternal(input: ObjectInput) {
        name = input.readUTF()
        age = input.readInt()
    }
}

Нюансы:

  • Требует публичного конструктора без аргументов
  • Более гибкий, но требует ручного управления полями
  • Может быть быстрее Serializable для сложных объектов