Мы обрабатываем сообщения, полученные из очереди, которая находится в byte[]
. И обрабатывает их, используя google Protobuf-java-2.6.1.jar
, вызывая mergeFrom
из com.google.protobuf.AbstractMessage
, что, в свою очередь, вызывает com.google.protobuf.CodedInputStream
.
Иногда сообщения успешно обрабатываются, но иногда выдают InvalidProtocolBufferException.invalidTag()
.
Я понимаю, что "Группы в protobuf записываются как начальная / конечная числовая пара", но, как мы получаем сообщения в byte[]
, как мы можем убедиться, каковы начальные и конечные теги и какой конечный тег группы не соответствует ожидаемому тегу?
Иногда одно и то же сообщение успешно обрабатывается на локальном компьютере с Windows, но такое же сообщение не выполняется на компьютере с Linux.
Message.Builder builder = getMessageBuilder(messageType);
ExtensionRegistry registry = ExtensionRegistry.newInstance();
Message parsedMessage = builder.mergeFrom(message, registry).build();`
- сообщение является байтом [].
- 3-я строка выдает исключение.