Сериализация нескольких протобуф-сообщений в Java и десериализация их в Python. - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу сохранить кучу протобуф-сообщений в файле и прочитать их позже.

В java я могу просто использовать writeDelimitedTo и parseDelimitedFrom для чтения и записи в файл. Тем не менее, я хочу прочитать его в Python, который, кажется, имеет только метод ParseFromString.

Некоторые вопросы SO очень похожи, например, Буферы протокола синтаксического анализа, написанные на Java и читаемые на Python , но это только для одного сообщения: не для нескольких.

1 Ответ

0 голосов
/ 01 мая 2018

Из прототипа написано, что вам нужно разобраться с размером вашего сообщения:

Потоковая передача нескольких сообщений

Если вы хотите записать несколько сообщений в один файл или поток, Вы должны следить за тем, где заканчивается одно сообщение, а другое начинается. Формат провода протокола буфера не является саморазграничением, поэтому парсеры буферов протокола не могут определить, где заканчивается сообщение своя. Самый простой способ решить эту проблему - написать размер каждое сообщение, прежде чем написать само сообщение. Когда вы читаете сообщения обратно, вы читаете размер, а затем читать байты в отдельный буфер, а затем анализировать из этого буфера. (Если вы хотите избежать копирование байтов в отдельный буфер, проверьте CodedInputStream класс (как в C ++, так и в Java), который можно ограничить чтением до определенное количество байтов.)

https://developers.google.com/protocol-buffers/docs/techniques

Простым решением может быть сериализация каждого прото в base64 на новой строке в вашем файле.

При этом на python будет довольно легко разобрать и использовать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...