Как использовать protoc для декодирования файлов protobuf

Я так запутался с использованием протокола и не могу найти в Интернете примеры его использования: -

protoc -IPATH=path_to_proto_file_directory  path_to_proto_file --decode=MESSAGE_TYPE  < ./request.protobuf 

Итак, что такое message_type здесь и может ли кто-нибудь написать его полный правильный пример


person Raj Hassani    schedule 04.04.2017    source источник


Ответы (1)


Несколько лет спустя, вот еще один ответ.

# Check the version
protoc --version
>libprotoc 3.0.0

Необработанное декодирование

Вы можете использовать параметр --decode_raw без схемы (файл .proto). Рассмотрим этот простой пример сообщения, содержащего байты 0x08 0x01. Я предполагаю среду Linux с эхом

# Use echo to print raw bytes and don't print an extra `\n` newline char at the end
echo -en '\x08\x01' | protoc --decode_raw

# Output below. This means field 1 integer type with a value of 1
1: 1

Декодировать со схемой (файл .proto)

Если у вас есть прото-файл, вы можете получить лучшие результаты, чем --decode_raw. Вы даже можете отправить вывод из --decode обратно в протокол, если хотите закодировать его с новыми значениями.

Example.proto file contents
syntax = "proto3";

message Test {
  int32 FieldOneNumber
}
# Decode the same message as the raw example against this schema
echo -en '\x08\x1' | protoc --decode="Test" --proto_path= ./Example.proto

# Output. Note that the generic field named 1 has been replaced by the proto file name of FieldOne.
FieldOne: 1
person DieOde    schedule 22.05.2021