Пытаюсь десериализовать данные используя методы 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, };