Если у вас есть маркер, вы должны гарантировать, что шаблон не существует в другом месте вашего двоичного потока. Если он существует, вы должны использовать специальную escape-последовательность для его дифференциации. Протокол Telnet использует 0xFF для маркировки специальных команд, которые не являются частью потока данных. Всякий раз, когда поток данных содержит естественный 0xFF, он должен быть заменен на 0xFFFF.
Таким образом, вы бы использовали 2-байтовый маркер, чтобы начать новый раздел, например, 0xFF01. Если ваш читатель видит 0xFF01, это новый раздел. Если он увидит 0xFFFF, вы свернете его в один 0xFFFF. Естественно, вы можете расширить этот подход, чтобы использовать любой желаемый маркер длины.
(Хотя мое личное предпочтение - это текстовый формат (необязательно сжатый) или двоичный формат с байтами длины вместо маркеров. Я не понимаю, как вы его сериализуете, не зная, когда вы закончили читать структуру данных. )