Когда мы должны внедрять интерфейс Serializable?

public class Contact implements Serializable {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  • Когда следует реализовать интерфейс Serializable?
  • Зачем мы это делаем?
  • Предоставляет ли он какие-либо преимущества или безопасность?
123
28 дек. '11 в 22:25
источник поделиться
3 ответов
  1. От чего эта "сериализация" вообще вещь? :

    Он позволяет вам взять объект или группу объектов, поместить их на диск или отправить их по проводному или беспроводному транспортному механизму, а затем, возможно, на другом компьютере, обратить процесс вспять: восстановить исходный объект (ы). Основные механизмы состоят в том, чтобы сгладить объект в одномерный поток битов и превратить этот поток битов обратно в исходный объект (ы).

    Как и в Transporter на Star Trek, все сводится к тому, чтобы взять что-то сложное и превратить его в плоскую последовательность из 1 и 0, затем взять эту последовательность из 1 и 0 (возможно, в другом месте, возможно, в другое время) и восстановить исходное сложное ". что-то."

    Итак, реализуйте интерфейс Serializable когда вам нужно сохранить копию объекта, отправить его другому процессу, который выполняется в той же системе или по сети.

  2. Потому что вы хотите сохранить или отправить объект.

  3. Это облегчает хранение и отправку объектов. Это не имеет ничего общего с безопасностью.

132
28 дек. '11 в 22:33
источник

Связанные вопросы


Похожие вопросы

  • Внедрите интерфейс Serializable, если хотите преобразовать экземпляр класса в ряд байтов или когда вы думаете, что объект Serializable может ссылаться на экземпляр вашего класса.

  • Serializable классы полезны, когда вы хотите сохранить их или отправить их по проводке.

  • Экземпляры классов Serializable могут быть легко переданы. Однако сериализация имеет некоторые последствия для безопасности. Прочитайте Джошуа Блоха "Эффективная Java".

40
28 дек. '11 в 22:38
источник

Ответ на этот вопрос, возможно, удивительно, никогда или более реалистично, только когда вы вынуждены взаимодействовать с унаследованным кодом. Это рекомендация в Effective Java, 3-е издание Джошуа Блоха:

Нет никакой причины использовать сериализацию Java в любой новой системе, которую вы пишете

По словам главного архитектора Oracle Марка Рейнхольда, устранение существующего механизма сериализации Java является долгосрочной целью.


Почему Java-сериализация имеет недостатки

В качестве части языка Java предоставляет схему сериализации, к которой вы можете подключиться, используя интерфейс Serializable. Эта схема, однако, имеет несколько неразрешимых недостатков и должна рассматриваться разработчиками языка Java как неудачный эксперимент.

  • Это в основном делает вид, что можно говорить о сериализованной форме объекта. Но существует бесконечно много схем сериализации, что приводит к бесконечному количеству сериализованных форм. При навязывании одной схемы без какого-либо изменения схемы приложения не могут использовать схему, наиболее подходящую для них.
  • Он реализован как дополнительное средство конструирования объектов, которое обходит любые предварительные проверки, выполняемые вашими конструкторами или фабричными методами. Если не будет написан сложный, подверженный ошибкам и трудный для тестирования код дополнительной десериализации, ваш код, вероятно, имеет существенную уязвимость безопасности.
  • Проверка совместимости разных версий сериализованной формы очень сложна.
  • Работа с неизменяемыми объектами хлопотна.

Что делать вместо

Вместо этого используйте схему сериализации, которую вы можете явно контролировать. Например, протокол буфера, JSON, XML или ваша собственная схема.

4
21 дек. '18 в 22:10
источник

Посмотрите другие вопросы по меткам или Задайте вопрос