Сериализация объектов
n Сериализация – преобразование состояния объекта в поток байтов
n Десериализация – восстановление состояния объекта из данных потока
n Не все объекты могут быть сериализованы
n Класс должен быть подготовлен к сериализации
Порядок сериализации и десериализации
n В нисходящем порядке по древовидной иерархии типов: от первого сериализуемого класса до частного типа
n Объекты, на которые ссылаются поля, сериализуются в порядке обнаружения
n Перед десериализацией выполняется загрузка участвующих классов (возможен выброс исключения ClassNotFoundException)
Пример иерархии классов
class Class1 extends Object {
private int state1 = 1;
}
class Class2 extends Class1 implements java.io.Serializable {
protected int state21;
private int state22;
public Class2(int s1, int s2) {
state21 = s1 + 15;
state22 = s2 - 1;
}
}
class Class3 extends Class2 {
public int state3 = 3;
}
Порядок сериализации
Порядок десериализации
Вопрос 52 Понятие сериализации. Подготовка классов к сериализации. Принципы настройки сериализации.40, 44, 49-50 Лекция Механизмы ввода-вывода информации. Понятие сериализации.
Сериализация объектов
n Сериализация – преобразование состояния объекта в поток байтов
n Десериализация – восстановление состояния объекта из данных потока
n Не все объекты могут быть сериализованы
n Класс должен быть подготовлен к сериализации
Подготовка классов к сериализации
n Должен реализовываться интерфейс-маркер java . io . Serializable
n Все сериализуемые поля должны иметь сериализуемый тип
n Родительский класс должен иметь конструктор по умолчанию (без параметров) или быть подготовленным к сериализации
n Сериализуются поля объекта, не обозначенные как transient или static
Настройка сериализации
n Для изменения работы механизма сериализации на уровне вашего класса в самом классе надо описать методы:
l реализация сериализации
private void writeObject(ObjectOutputStream out) throws IOException
l реализация десериализации
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
n Уровень доступа методов позволяет им независимо существовать в различных классах в иерархии наследования
n Можно не переписывать чтение/запись полностью, а лишь изменить порядок записи полей и их формат (см. методы ObjectOutputStream . writeFields () и ObjectInputStream . readFields ())
Контроль версий
n Каждый класс имеет уникальный идентификатор номера версии – 64 битовое значение long
n По умолчанию значение рассчитывается как функция от кода класса (включая методы)
n Несовпадение версий при десериализации объекта выбрасывает исключение InvalidClassException
n Проблему можно обойти, явно введя в класс поле
private static final long
serialVersionUID = ...;
Вопрос 53 Понятие сериализации. Интерфейс Externalizable. 40, 51. Лекция Механизмы ввода-вывода информации. Понятие сериализации.
Сериализация объектов
n Сериализация – преобразование состояния объекта в поток байтов
n Десериализация – восстановление состояния объекта из данных потока
n Не все объекты могут быть
сериализованы
n Класс должен быть
подготовлен к сериализации
Интерфейс Externalizable
n Ручная» сериализация:
l реализация сериализации
public void writeExternal(ObjectOutputStream out) throws IOException
l реализация десериализации
private void readExternal(ObjectInputStream in) throws IOException, ClassNotFoundException
n Требует наличия конструктора по умолчанию у класса.
JVM сначала вызывает конструктор без параметров, и только
потом на уже созданном объекте вызывает метод readExternal
n Выигрыш в производительности при грамотной реализации
n Нарушение целостности графа
Вопрос 54 Структура пакета java.lang. Тип Object, его особенности и методы. Класс Class. 2-4, 12 Лекция Базовые и утилитные классы API JAVA
Пакет java . lang
n Базовые классы
l Object
l Class
l Обертки примитивных типов
l Math
l Классы работы со строками
l Классы управления процессами и потоками
l Средства рефлексии
l И т.д.
n Базовые интерфейсы
l Cloneable
l Comparable
l Runnable
l И т.д.
n Основные исключения
l Exception
l Error
l RuntimeException
l SecutityException
l И т.д.
n Этот пакет импортируется по умолчанию
Класс Object
n Является суперклассом для всех классов (включая массивы)
n Переменная этого типа может ссылаться на любой объект (но не на переменную примитивного типа)
n Его методы наследуются всеми классами
n Реализует базовые операции с объектами
Методы класса Object
n Получение строкового представления объекта
String toString()
n Получение ссылки на описание класса объекта
final Class getClass()
n Клонирование объекта (получение копии)
protected Object clone()
n Проверка равенства объектов
boolean equals( Object obj)
n Получение хэш-кода объекта
int hashCode()
n Метод завершения работы с объектом
protected v oid finalize()
n Методы обслуживания блокировок в многопоточных приложениях
void wait (...), void notify (), void notifyAll ()
Класс Class
n Является метаклассом для всех классов Java
n Экземпляры содержат описания классов, загружаемых JVM
n Не имеет доступного конструктора
n Содержит методы для работы с классами и их методами
n Лежит в основе т.н. «рефлексии»
Вопрос 55 Клонирование объектов 5-8 Лекция Базовые и утилитные классы API JAVA
Клонирование объектов
n Считается, что результатом клонирования является копия объекта
int[] arrayCopy = (int []) array.clone();
n Массивы поддерживают операцию клонирования
n В классе Object метод clone () является защищенным
n Метод clone () реализуется в конкретном классе
n Никто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса
n Однако существует ряд соглашений, регламентирующих реализацию метода clone ()
Дата: 2019-07-30, просмотров: 329.