350 likes | 821 Views
Сериализация. В java. Определение. Сериализация это процесс сохранения состояния объекта в последовательность байт; Десериализация это процесс восстановления объекта, из этих байт . JAVA API предоставляет стандартный механизм сериализации , это просто синтаксический сахар.
E N D
Сериализация В 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 • после окончания записи метаданных начинается запись фактических данных ассоциированных с экземпляром, только в этот раз начинается запись с самого верхнего суперкласса • рекурсивная запись данных ассоциированных с экземпляром начиная с самого низшего суперкласса http://habrahabr.ru/post/60317/
Десериализация в другой jvm • Чтобы класс можно было сериализовать в одной jvm, а десериализовать в другой необходимо, чтобы в обе jvmбыли загружены классы с одинаковым описанием и указанным SerialVersionUID.
Что такое JAXB • Стандартная технология для связывания объектной модели с XML документом на java • Используется для преобразования XML в java объекты и наоборот • Позволяет не заботится о методе разбора XML
Основные методы JAXB • Marshalling – преобразования java объекта в XML • UnMarshalling – преобразование XML в java объект Примечание Можно заметить что в случае когда речь идёт о текстовом формате переноса данных вместо слова сериализациячасто используют слово маршалинг. Маршалингздесь более узкое понятие чем сериализацияи указывает на то что формат преобразования будет текстовым (XML), а не бинарным (java Serializable).
Java object to XML • Создаём простой java объект • Добавляем jaxbаннатации
Пример класса Определяет корневой элемент XML файла Определяет порядок элементов в XML Определяет элемент XML, также устанавливает имя сущности Добавляет обёртку над элементом Заметим, что список хранит элементы типа State. А как сериализоватьState?
Аннотированный класс Stae.java Означает, что класс Country будет корневым элементом
Сериализация в XML Создание экземпляра класса Country Создание jaxbконтекста Создание маршалера Сериализация созданного экземплара
Процесс десериализации Создание jaxbконтекста Создание анмаршалера Сериализация созданного экземплара Вывод
JAXB генерация классов • Java классы содержат сложную и не всегда очевидные аннотации • Иногда нужно, чтобы java классы генерировались из готового описания структуры xml • JAXB имеет специальную утилиту для генерации классов (%JAVA_HOME\bin\xjc.exe%) из xsdдокумента.
Xml Schemadefinition (xsd) • Это стандартное (w3c) описание формата данных передаваемого в xml • Правильный xml документ • Специально создавалась для использования внутри программного обеспечения для обработки документов • Благодаря включению одного документа в другой позволяет распространять стандарты http://www.w3.org/standards/techs/xmlschema
Информация в xsd • Xsdобязательно содержит: • Словарь (называние элементов и атрибутов) • Модель содержания (отношение между элементами и их структура) • Типы данных • Такая информация позволяет легко подготовить классы ООП языка В качестве альтернативы XML Schema раньше применялась DTD
Схема работы JAXB • Для XML пишется XML схема в виде xsd файла • Используя утилиту xjc из стандартной поставки Java JDK генерируете из схемы набор классов. • Классы включаются в программу. JAXB marshaller используется для генерации XML из объектов, unmarshaller – для получения объектов из XML
Заголовок документа Заголовок xml Namespace для xml
Генерация Фабрика для создания объектов Хранит информацию о namespace’е Остальные сгенерированные классы являются простыми проаннотированными java классами представляющими элементы xml
Изучить самомтоятельно JSON http://wiki.fasterxml.com/JacksonInFiveMinutes Jackson https://sites.google.com/site/gson/gson-user-guideGjson