Сериализация В java
Определение Сериализация это процесс сохранения состояния объекта в последовательность байт; Десериализация это процесс восстановления объекта, из этих байт. JAVA API предоставляет стандартный механизм сериализации, это просто синтаксический сахар.
СТАНДАРТНЫЙ МЕХАНИЗМ java.io.Serializable
Зачем это придумали? Необходимость общаться нескольким компонентам java (т.е. нужен протокол передачи данных) Возможность сохранения и восстановления состояния объектов Возможность копирования сложных объектов
Зачем это придумали?
Передача данных с клиента на сервер
Как сериализовать? Класс объекта должен реализовать интерфейс java.io.Serializable В этом интерфейсе нет ни одного метода, он просто маркирует объект как сериализуемый
Как сериализовать? Для сериализации объекта необходимо передать экземпляр класса в метод weriteObject() класса java.io.ObjectOutputStream Теперь объект записан в файл
Десереализация Обратный процесс использует метода readObject() класса java.io.ObjectInputStream
Что лежит в файле temp.out Шестнадцатеричное представление содержимого. Два шестнадцатеричных символа представляют один байт, т.е. в файле 51 байт, тогда как в классе TestSerial всего 2 значения по байту.
Алгоритм сериализации запись метаданных о классе ассоциированном с объектом рекурсивная запись описания суперклассов, до тех пор пока не будет достигнут java.lang.Object после окончания записи метаданных начинается запись фактических данных ассоциированных с экземпляром, только в этот раз начинается запись с самого верхнего суперкласса рекурсивная запись данных ассоциированных с экземпляром начиная с самого низшего суперкласса
Десериализация в другой jvm Чтобы класс можно было сериализовать в одной jvm, а десериализовать в другой необходимо, чтобы в обе jvm были загружены классы с одинаковым описанием и указанным SerialVersionUID.
JAXB Java Architecture for XML Binding
Что такое JAXB Стандартная технология для связывания объектной модели с XML документом на java Используется для преобразования XML в java объекты и наоборот Позволяет не заботится о методе разбора XML
Основные методы JAXB Marshalling – преобразования java объекта в XML UnMarshalling – преобразование XML в java объект Примечание Можно заметить что в случае когда речь идёт о текстовом формате переноса данных вместо слова сериализация часто используют слово маршалинг. Маршалинг здесь более узкое понятие чем сериализация и указывает на то что формат преобразования будет текстовым (XML), а не бинарным (java Serializable).
Marshalling
UnMarshalling
Java object to XML 1.Создаём простой java объект 2.Добавляем jaxb аннатации
Пример класса Определяет корневой элемент XML файла Определяет порядок элементов в XML Определяет элемент XML, также устанавливает имя сущности Добавляет обёртку над элементом Заметим, что список хранит элементы типа State. А как сериализовать State?
Аннотированный класс Stae.java Означает, что класс Country будет корневым элементом
Сериализация в XML Создание экземпляра класса Country Создание jaxb контекста Создание маршалера Сериализация созданного экземплара
XML документ
Процесс десериализации Создание jaxb контекста Создание анмаршалера Сериализация созданного экземплара Вывод
JAXB генерация классов Java классы содержат сложную и не всегда очевидные аннотации Иногда нужно, чтобы java классы генерировались из готового описания структуры xml JAXB имеет специальную утилиту для генерации классов (%JAVA_HOME\bin\xjc.exe%) из xsd документа.
Xml Schema definition (xsd) Это стандартное (w3c) описание формата данных передаваемого в xml Правильный xml документ Специально создавалась для использования внутри программного обеспечения для обработки документов Благодаря включению одного документа в другой позволяет распространять стандарты
Информация в xsd Xsd обязательно содержит: – Словарь (называние элементов и атрибутов) – Модель содержания (отношение между элементами и их структура) – Типы данных Такая информация позволяет легко подготовить классы ООП языка В качестве альтернативы XML Schema раньше применялась DTDDTD
Схема работы JAXB Для XML пишется XML схема в виде xsd файла Используя утилиту xjc из стандартной поставки Java JDK генерируете из схемы набор классов. Классы включаются в программу. JAXB marshaller используется для генерации XML из объектов, unmarshaller – для получения объектов из XML
Схема работы JAXB
Пример описания xsd
Заголовок документа Namespace для xml Заголовок xml
Описание элементов
Описание структуры
Генерация Фабрика для создания объектов Хранит информацию о namespaceе Остальные сгенерированные классы являются простыми проаннотированными java классами представляющими элементы xml
JSON Изучить самомтоятельно Gjson Jackson