Кастомный сериализатор\десериализатор объектов
Всем привет. Столкнулся с задачей - необходимо создать кастомный серилизатор\десерилизатор объектов. Программа должна конвертировать объект в массив байтов и, соответственно, выполнять обратную конвертацию без использования стандартных библиотек серилизации.
Не совсем понимаю, как выполнять такую задачу. Буду благодарен за любую помощь и примеры.
Ответы (1 шт):
Это довольно сложная задача. Стандартный способ реализации приблизительно такой:
- Открываем выходной поток
OutputStream - Берем класс, через рефлексию выкручиваем поля класса, если поле класса примитивный тип или некий базовый тип, а ля
String/Objectпишем поля в выходной поток с некоторым заголовком, который показывает тип записываемого поля - Если поле класса другой составной класс, то погружаемся в рекурсию и раскручиваем этот класс до полей (см. п.1)
- И т.д. пока все поля всех классов не выкрутим до примитивных и базовых типов и закрываем поток
Для десериализации выкручиваем в обратном порядке, читаем заголовок, заводим примитивный/базовый тип создаем его ну и т.д.
Для понимания общего принципа работы стандартного механизма Serializable - исходники ObjectOutputStream - все упирается в базовый метод writeObject() реализованный для всех примитивных/базовых типов Java - по сути вы должны написать что-то подобное этому.