Главная страница
Навигация по странице:

  • 11) Как сериализовать статическое поле.

  • Serializable

  • Externalizable

  • Ответы на вопросы по ревью 4. Java io. Ключевым понятием здесь является понятие потока


    Скачать 1.93 Mb.
    НазваниеJava io. Ключевым понятием здесь является понятие потока
    Дата03.07.2022
    Размер1.93 Mb.
    Формат файлаdoc
    Имя файлаОтветы на вопросы по ревью 4.doc
    ТипДокументы
    #623608
    страница23 из 39
    1   ...   19   20   21   22   23   24   25   26   ...   39

    Вывод


    1. Сериализация – это процесс сохранения состояния объекта в последовательности байтов, которые затем могут быть сохранены в файле или отправлены по сети, и десериализация – это процесс восстановления объекта из этих байтов.

    2. Только подклассы Сериализуемый интерфейс может быть сериализован.

    3. Если наш класс не реализует Сериализуемый интерфейс или если он содержит ссылку на не Сериализуемый класс, то JVM выдаст Исключение NotSerializableException .

    4. Все преходящее и статические поля не сериализуются.

    5. serialVersionUID используется для проверки того, что сериализованные и десериализованные объекты имеют одинаковые атрибуты и, следовательно, совместимы с десериализацией.

    6. Мы должны создать serialVersionUID поле в нашем классе, поэтому, если мы изменим структуру нашего класса (добавление/удаление полей) JVM не пройдет Исключение InvalidClassException . Если мы не предоставим его, JVM предоставит тот, который может измениться при изменении нашей структуры классов.

    7. Мы можем переопределить поведение сериализации по умолчанию внутри нашего класса Java, предоставив реализацию writeObject и readObject методы.

    8. И мы можем вызвать ObjectOutputStream.defaultWriteObject() и ObjectInputStream.defaultReadObject из объекта записи и readObject методы для получения логики сериализации и десериализации по умолчанию.

    9. Мы можем выбросить исключение NotSerializableException исключение из writeObject и Объект чтения , если мы не хотим, чтобы наш класс был сериализован или десериализован.



    11) Как сериализовать статическое поле.

    Сериализация объектов


    Сериализация объекта представляет процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации, т.е. восстановление начального состояния структуры данных из битовой последовательности. Существует два способа сериализации объекта : стандартная сериализация java.io.Serializable и «расширенная» сериализация java.io.Externalizable.

    Интерфейс java.io.Serializable


    При использовании Serializable применяется стандартный алгоритм сериализации, который с помощью рефлексии (Reflection API) выполняет

    • запись в поток метаданных о классе, ассоциированном с объектом (имя класса, идентификатор SerialVersionUID, идентификаторы полей класса),

    • рекурсивную запись в поток описания суперклассов до класса java.lang.Object (не включительно),

    • запись примитивных значений полей сериализуемого экземпляра, начиная с полей самого верхнего суперкласса,

    • рекурсивную запись объектов, которые являются полями сериализуемого объекта.

    При этом ранее сериализованные объекты повторно не сериализуются, что позволяет алгоритму корректно работать с циклическими ссылками.

    Для выполнения десериализации под объект выделяется память, после чего его поля заполняются значениями из потока. Конструктор объекта при этом не вызывается. Однако при десериализации будет вызван конструктор без параметров родительского несериализуемого класса, а его отсутствие повлечёт ошибку десериализации.

    Интерфейс java.io.Externalizable


    При реализации интерфейса Externalizable вызывается пользовательская логика сериализации. Способ сериализации и десериализации описывается в методах writeExternal и readExternal. Во время десериализации вызывается конструктор без параметров, а потом уже на созданном объекте вызывается метод readExternal.

    Расширенный алгоритм сериализации может быть использован, если данные содержат «конфиденциальную» информацию. В этом случае имеет смысл шифровать сериализуемые данные и дешифровать их при десерилизации, что требует реализацию собственного алгоритма.

    Где используется сериализация Serializable?


    Сериализация была введена в JDK 1.1 и позволяет преобразовать отдельный объект или группу объектов в поток битов для передачи по сети или для сохранения в файл. И как было сказано выше, данный массив байтов или поток битов, можно обратно преобразовать в объекты Java. Главным образом это происходит автоматически благодаря классам ObjectInputStream и ObjectOutputStream.
    1   ...   19   20   21   22   23   24   25   26   ...   39


    написать администратору сайта