Вам следует сделать так, чтобы ваши сообщения соответствовали определенному формату, чтобы вы могли различать, когда они начинаются, а когда заканчиваются.Даже если это поток данных, его следует отправлять пакетами.
Один из вариантов - сначала отправить длину сообщения, а затем вы знаете, сколько данных ожидать.Но проблема в том, что если вы потеряете синхронизацию, вы никогда не сможете восстановить, и вы никогда не узнаете, что такое длина сообщения и каков его контент.Хорошо использовать некоторую специальную последовательность маркировки, чтобы знать, когда начинается сообщение.Это не на 100% защищено от ошибок (последовательность может появиться в данных), но, безусловно, помогает и позволяет восстанавливаться после потери синхронизации.Это особенно важно при чтении из двоичного потока, такого как сокет.
Даже древний последовательный протокол RS232 имел свой кадр и стоп-бит, чтобы знать, когда вы получили все данные.