Поле id
всегда будет 5-м байтом сообщения после четырех байтов поля len
. Вы можете сделать что-то вроде следующего:
DataInputStream stream;
// ...
int length = stream.readInt();
byte id = stream.readByte();
byte[] payload = new byte[length - 1];
stream.readFully(payload);
На самом деле это должно работать для любого сообщения, поскольку все они имеют одинаковый заголовок len
+ id
.
Редактировать:"Так что я не думаю, что могу предположить, что количество частей всегда будет соответствовать 5-байтовому числу."
Поле длиной в четыре байта может обрабатывать до 2 ^ 32-1 байтов в полезной нагрузке и с 8 битами на байт, что дает вам место для 34 359 738 360 штук. Этого должно быть много! : -)