Если код, анализирующий мои данные (который был сериализован с буфером протокола), знает, что он ожидает два целых числа и логическое значение, легко ли проанализировать эти значения?
Конечно;вам даже не нужно знать, что - вот инструмент , который будет пытаться декодировать неизвестный протобуф без каких-либо данных схемы, но есть предостережения, и некоторые данные могут быть неоднозначными.protoc
имеет встроенный аналогичный инструмент.
Что касается того, как получить к нему доступ из вашего собственного кода: все зависит от используемой вами библиотеки.Если используемая вами библиотека имеет API-интерфейс для чтения / анализа (а не просто для полной десериализации), вы можете использовать это.Вы также можете определить прототип proto2 со всем как поля расширения и использовать API расширения.Или, если вы знаете ожидаемую компоновку вашего конкретного объекта, вы можете просто объявить свой собственный тип либо в .proto, либо, возможно, даже не в этом.Имена не должны совпадать, только номера полей и типы.Например, с protobuf-net (.NET) в вашем сценарии будет работать следующее:
class SomeType {
[ProtoMember(1)] public int A {get;set;}
[ProtoMember(2)] public int A {get;set;}
[ProtoMember(3)] public bool A {get;set;}
}
...
var obj = Serializer.Deserialize<SomeType>(source);
Console.WriteLine(obj.A); // int
Console.WriteLine(obj.B); // int
Console.WriteLine(obj.C); // bool
Там - это дополнительный "padding / fluff", поэтому я рекомендую читателя/ parser, но ... это не , что сложно.