1) Это выглядит вменяемым?
Это выглядит довольно вменяемым. Однако, если вы собираетесь изобретать свой собственный формат, а не просто использовать сериализация Java , у вас должна быть веская причина. У вас есть веские причины (в некоторых случаях они существуют)? Одна из стандартных причин использования XStream состоит в том, чтобы сделать результат понятным для человека, который двоичный формат немедленно теряет. У вас есть веская причина для двоичного формата, а не для человека удобочитаемым? См. этот вопрос о том, почему читаемое человеком хорошо (и плохо).
Не было бы проще просто положить все в подписанную банку. Уже есть стандартные библиотеки Java и инструменты для этого, и вы получаете сжатие и проверку.
2) Что бы вы использовали для разделителя и как его определить?
Вместо разделителя я бы явно сохранял длину каждого блока перед блоком. Это так же просто, и предотвращает необходимость избегать разделителя, если он появляется сам по себе.
3) Правильный способ расчета MD5 в этом случае?
Здесь приведен пример кода , который выглядит разумным.
4) Что бы вы предложили почитать по теме?
На предмет сериализации? Я читал о сериализации Java, JSON и сериализации XStream, чтобы понять все плюсы и минусы каждого, особенно преимущества файлов, удобочитаемых человеком. Я также хотел бы взглянуть на классический формат файла, например, от Microsoft, чтобы понять возможные решения по проектированию в те времена, когда каждый байт имел значение, и как они были расширены. Например: Формат файла WAV .