У меня есть класс A, который содержит экземпляры нескольких других классов B, C и D , как показано .
Я хочу преобразовать класс A и его содержимое в массив байтов и сохранить их в файле. Позже я хочу прочитать байтовый массив из файла и преобразовать его обратно в экземпляр класса A , как показано здесь . У меня возникают проблемы при разработке элегантного решения, которое конвертирует туда-сюда объекты и байтовые массивы.
Одним из решений, которое я рассмотрел, было создание одного класса конвертера, который может конвертировать туда и обратно между всеми моими объектами и байтовыми массивами:
public Converter{
public static ClassA getInstance(byte[] b){...return new ClassA()}
public byte[] getBytes(ClassA classA){...}
public static ClassB getInstance(byte[] b){...return new ClassB()}
public byte[] getBytes(ClassB classB){...}
}
Этот подход приводит к очень большому классу с большим количеством методов.
Другой подход заключается в создании «класса конвертера» для каждого класса, который я хочу сохранить в файле.
public ClassAConverter extends Converter<ClassA>{
public ClassA getInstance(byte[] b){...return new ClassA()}
public static byte[] getBytes(ClassA classA){...}
}
public ClassBConverter extends Converter<ClassB>{
public ClassB getInstance(byte[] b){...return new ClassB()}
public static byte[] getBytes(ClassB classB){...}
}
Однако этот дизайн имеет недостаток, заключающийся в создании большого количества классов.
Мне известно, что Java Serialization достигает большей части того, что я здесь описал, но я ищу более гибкое и настраиваемое решение, которое также позволяет анализировать файл другими независимыми программами. Кроме того, размер файла является проблемой, и использование собственного двоичного формата обеспечивает хорошую эффективность использования пространства.
Есть ли какой-либо шаблон проектирования, который мог бы помочь более элегантно реализовать логику преобразования?