Я пытаюсь получить более полное представление о том, как protobuf работает на python, но мне сложно понять, почему он не работает.

Мой прото-файл выглядит примерно так:

syntax = "proto3";

message Something
{
    message Object
{
    uint32 id = 1;
    bytes x = 2; 
    repeated int64 values = 3 [packed=true];
    repeated uint32 average_weights = 4 [packed=true];
    bytes updated_counters = 5;
}
uint64 timestamp = 1;
bool last = 2;
repeated Object objects = 3;
}

Данные из файла, который я пытаюсь получить, имеют кодировку utf-8 и выглядят так:

38370000 43171110 6A171110 0C00C200 08ECADE8 E0F90410 011A1F08 EAAE1812 1401000F 0002027C F0250001 26000127 00012A00 012A0100 1A001A20 08EAAE14 12140100 0F000202 7CF02500 01260001 27000128 00012A02 00001A00 1A2308EA 2E121401 000F0002 027CF025 00012600 01310001 3200012A 06000000 0000001A 001A2008 EAAE1412 1401000F 0002027C F0250001 26000127 00012800 022A0200 001A001A 1D08EAAE 0C121101 000F0002 027CF025 00012600 01310001 2A020000 1A00

Я открываю файл в двоичном режиме и читаю данные в переменной:

f = open("test.txt","rb")
data = f.read()

Когда пришло время использовать msg.ParseFromString (data), я получаю сообщение об ошибке:

msg.ParseFromString(data)
google.protobuf.message.DecodeError: Error parsing message

Предполагается, что данные представляют собой одно сообщение Something, но внутри несколько сообщений Object. Нужно ли мне сообщать парсеру, когда заканчивается сообщение Object и начинается другое, или это что-то еще?

0
Muprhyyy