← Назад к вопросам

Что такое Serializable?

1.7 Middle🔥 131 комментариев
#Android компоненты#Жизненный цикл и навигация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Serializable в Java и Android

Serializable — это интерфейс-маркер в Java, который указывает, что объект класса может быть преобразован в поток байтов и восстановлен обратно. Это критически важно для передачи данных между компонентами Android, сохранения состояния приложения и работы с Bundles.

Зачем нужен Serializable

В Android часто требуется передать объект из одной Activity в другую, сохранить его на диск или отправить по сети. Для этого объект нужно сериализовать — преобразовать в последовательность байтов.

Как использовать Serializable

Чтобы класс стал сериализуемым, нужно реализовать интерфейс Serializable:

import java.io.Serializable

class User(val name: String, val age: Int) : Serializable {
    companion object {
        const val serialVersionUID = 1L
    }
}

Передача через Intent

Теперь объект можно передать между Activities:

// Activity 1 — отправка
val user = User("Иван", 25)
val intent = Intent(this, Activity2::class.java)
intent.putExtra("user", user)
startActivity(intent)

// Activity 2 — получение
val user = intent.getSerializableExtra("user") as User

Парцелизация vs Сериализация

В Android есть более эффективный способ — Parcelable:

data class User(
    val name: String,
    val age: Int
) : Parcelable {
    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(name)
        parcel.writeInt(age)
    }

    override fun describeContents() = 0
}

Parcelable работает на 10-100 раз быстрее чем Serializable, так как не использует рефлексию и не создаёт промежуточные объекты.

serialVersionUID

Этот идентификатор нужен для версионирования класса:

companion object {
    const val serialVersionUID = 1L  // Увеличивай при изменении полей
}

Если структура класса изменилась, а serialVersionUID остался тем же, десериализация может сломаться.

Когда использовать

  • Serializable: простые объекты, когда скорость не критична
  • Parcelable: частые передачи данных (Intent, Bundle)
  • JSON: сеть, REST API, хранилище

Безопасность

Сериализация может быть уязвима для атак. Никогда не десериализуй данные из ненадёжных источников без валидации.

Вывод: Serializable — мощный инструмент для работы с объектами в Android, но для производительности лучше использовать Parcelable.

Что такое Serializable? | PrepBro