Сериализуемый класс Почему? и как? на Java

1

Зачем вам нужно реализовать этот пустой интерфейс для сериализации объекта? Почему, если вам нужно это сделать, методы сериализации в файле запрашивают объект вместо Serializable? ObjectOutputStream.writeObject(Object obj)

Как это работает?

  • 0
    Google - правильное место, чтобы узнать об этом. Или Java-учебники на веб-сайте оракула.
  • 0
    Или вы также можете прочитать javadoc интерфейса Serializable: docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
Теги:
serialization

2 ответа

2

Объект может быть сериализован только в том случае, если он реализует интерфейс Serializable. На это есть несколько причин:

  • Сериализуемые характеристики объекта должны быть статусом проектирования для объекта, а не автоматическим поведением для всех классов. Могут быть причины, по которым программист не должен создавать класс Serializable.
  • Одним из этих примеров является размещение конфиденциальной информации в классе. Рассмотрим этот класс:

    public class Machine реализует Serializable {private String password; } }

Это возможная угроза проектирования для машины класса, которая включает в себя пароль, который может быть сериализован. Пароль здесь должен быть временным, если не требуется никаких других требований для пароля serilaizin.

  • Не все объекты захватывают полезную семантику в сериализованном состоянии. Состояние потока является одним из этих примеров.

ObjectOutput имеет методы, позволяющие записывать объекты в потоковое содержимое, которое может быть выполнено не только Serialiazaton. ObjectOutputStream, например, нуждается в объектах, которые реализуют Serialaizable.

1

Они называются interfaces tag или marker; следующий отрывок из статьи в Википедии объясняет это довольно хорошо. Пожалуйста, обратите внимание также на критику шаблона этой статьи.

Примером применения интерфейсов маркеров на языке программирования Java является интерфейс Serializable. Класс реализует этот интерфейс, чтобы указать, что его непереходные элементы данных могут быть записаны в ObjectOutputStream. ObjectOutputStream частный метод writeObject() содержит ряд instanceof тестов, чтобы определить writeability, один из которых ищет Serializable интерфейс. Если какой-либо из этих тестов терпит неудачу, метод NotSerializableException.

  • 0
    Я думал о том же, но в таком случае, почему метод writeObject запрашивает объект вместо Serializable?
  • 0
    ObjectOutput имеет методы, которые позволяют записывать объекты в потоковое содержимое, что может быть сделано не только Serialiazaton. Например, для ObjectOutputStream нужны объекты, которые реализуют Serialaizable.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню