Раз не склеивается само, значит нужно склеивать самому. Алгоритм довольно прост - читаем из буфера не более readableBytes() байт. Если не хватило данных до полного пакета, то сохраняем прочитанное и ждём следующего пакета, откуда дочитываем недостающее.
Обычно в сетевых протоколах предусматривают заголовок с общей длиной пакета или маркеры конца, чтобы можно было понять сколько нужно вычитывать данных из сети.
Вот эти квадратики в логе почти наверняка и есть маркер окончания пакета или заголовок следующего:
Но я думаю, что движок предоставляет абстракции более высокого уровня, которые сами собирают сырые пакеты в какой-нибудь Packet250CustomPayload, а вам останется только обработать их.