Для сообщений верхнего уровня (то есть отдельных вызовов для сериализации): буквально их нет. Если вы не добавите свое собственное обрамление, сообщения будут активно перетекать друг в друга, поскольку десериализатор будет (по умолчанию) просто читать до конца потока. Итак: если вы слепо объединили несколько объектов без собственного протокола кадрирования: у вас теперь есть проблемы.
Для внутренних сообщений существует два способа кодирования подобъектов - префикс длины и группы. Группы в значительной степени устарели, а кодировка подобъектов неоднозначна в том смысле, что это также те же маркеры, которые описывают строки, большие двоичные объекты (байты) и «упакованные массивы». Вы, вероятно, не хотите пытаться справиться с этим.
Итак: звучит так, как будто вам нужно добавить свой собственный протокол кадрирования, и в этом случае ответ будет: каким бы ни был ваш протокол кадрирования. Просто помните, что protobuf является двоичным, поэтому вы не можете полагаться на какую-либо последовательность байтов в качестве сторожа / терминатора. Вместо этого лучше использовать подход с префиксом длины.