没有它们的情况下解析协议缓冲区数据

时间:2019-05-14 15:00:25

标签: protocol-buffers

如果不使用从其编译的.proto / a类,是否很难解析序列化协议缓冲区?

显然,使用.proto更加容易。我想知道在没有给定数据描述符的情况下,没有协议缓冲区序列化的数据结构是否可以轻松解析。即,如果解析我的数据的代码(已使用协议缓冲区序列化)知道它需要两个整数和一个布尔值,是否容易解析出这些值?还是协议缓冲区增加了额外的填充/填充?

1 个答案:

答案 0 :(得分:1)

  

如果解析我的数据的代码(已使用协议缓冲区序列化)知道需要两个整数和一个布尔值,是否容易解析出这些值?

当然;您甚至不需要知道-here's a tool会尝试在没有任何模式数据的情况下解码未知的protobuf,但是有一些注意事项,并且某些数据可能是模棱两可的。 protoc内置了类似的工具。

关于如何从您自己的代码访问它:这完全取决于您所使用的库。如果您使用的库具有原始的读取器/ parser API(而不仅仅是完整的反序列化器),则可以使用该库。您还可以定义一个原型2原型类型,并将所有内容都作为扩展字段,并使用扩展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

还有 个额外的“填充/绒毛”,这就是为什么我推荐阅读器/解析器库的原因,但是...这并不难。 >

相关问题