Кастомный сериализатор\десериализатор объектов

Всем привет. Столкнулся с задачей - необходимо создать кастомный серилизатор\десерилизатор объектов. Программа должна конвертировать объект в массив байтов и, соответственно, выполнять обратную конвертацию без использования стандартных библиотек серилизации.

Не совсем понимаю, как выполнять такую задачу. Буду благодарен за любую помощь и примеры.


Ответы (1 шт):

Автор решения: Barmaley

Это довольно сложная задача. Стандартный способ реализации приблизительно такой:

  1. Открываем выходной поток OutputStream
  2. Берем класс, через рефлексию выкручиваем поля класса, если поле класса примитивный тип или некий базовый тип, а ля String/Object пишем поля в выходной поток с некоторым заголовком, который показывает тип записываемого поля
  3. Если поле класса другой составной класс, то погружаемся в рекурсию и раскручиваем этот класс до полей (см. п.1)
  4. И т.д. пока все поля всех классов не выкрутим до примитивных и базовых типов и закрываем поток

Для десериализации выкручиваем в обратном порядке, читаем заголовок, заводим примитивный/базовый тип создаем его ну и т.д.

Для понимания общего принципа работы стандартного механизма Serializable - исходники ObjectOutputStream - все упирается в базовый метод writeObject() реализованный для всех примитивных/базовых типов Java - по сути вы должны написать что-то подобное этому.

→ Ссылка