@postflow

Почему protobuf не понимает массив в parseFrom?

Пытаюсь десериализовать данные используя методы protobuf:
У Googl-а сказано :
parseFrom(byte[] data);: разбирает сообщение из заданного массива байтов.


я передаю так:
try {
                            Protocol.response response = Protocol.response.parseFrom(readBuf);
                        } catch (InvalidProtocolBufferException e) {
                            e.printStackTrace();
                        }

массив readBuf - получаю из хендлера:
byte[] readBuf = (byte[]) msg.obj;
При этом массив readBuf НЕ пустой:
[B@41c34330
значения имеют только 0ой и 1ый элемент в массиве:
readBuf[0]8
readBuf[1]1
readBuf[2]0
... и т.д до конца массива.

Вот кусок протофайла(my.proto):

enum response_type {
    OK = 1;
    BUSY = 2;
    ERROR = 3;
}

message response {
    required response_type resp = 1;
}

И постоянно получаю исключение(в логах):
...
W/System.err: com.google.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
...
В response, я так понимаю, должно быть присвоено OK или BUSY или ERROR. Верно?

UPD:
если массив создаю руками :
byte[] readBuf2 = { 8, 1, };
в response возвращает то что нужно(OK).

В чем отличия строк? :

byte[] readBuf = (byte[]) msg.obj;

byte[] readBuf2 = { 8, 1, };
  • Вопрос задан
  • 318 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы