Protocol buffers 解析没有它们的协议缓冲区数据

Protocol buffers 解析没有它们的协议缓冲区数据,protocol-buffers,Protocol Buffers,如果不使用从中编译的.proto/a类,序列化协议缓冲区是否很难解析 显然,使用.proto更容易。我想知道,如果给定数据的其他描述符,使用协议缓冲区序列化的数据结构是否可以在没有协议缓冲区的情况下轻松解析。i、 e.如果解析我的数据(用协议缓冲区序列化)的代码知道它需要两个int和一个boolean,那么解析这些值容易吗?或者协议缓冲区是否添加了额外的填充/绒毛 如果解析我的数据(用协议缓冲区序列化)的代码知道它需要两个int和一个boolean,那么解析这些值容易吗 当然;您甚至不需要知道这

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

显然,使用.proto更容易。我想知道,如果给定数据的其他描述符,使用协议缓冲区序列化的数据结构是否可以在没有协议缓冲区的情况下轻松解析。i、 e.如果解析我的数据(用协议缓冲区序列化)的代码知道它需要两个int和一个boolean,那么解析这些值容易吗?或者协议缓冲区是否添加了额外的填充/绒毛

如果解析我的数据(用协议缓冲区序列化)的代码知道它需要两个int和一个boolean,那么解析这些值容易吗

当然;您甚至不需要知道这一点——这将尝试在没有任何模式数据的情况下解码未知的protobuf,但是有一些警告,其中一些数据可能是不明确的
protoc
内置了类似的工具

至于如何从您自己的代码中访问它:这取决于您使用的整个库。如果您正在使用的库具有原始读取器/解析器API(而不仅仅是完整的反序列化器),那么您可以使用它。您还可以定义proto2原型,将所有内容都作为扩展字段,并使用扩展API。或者,如果您知道特定对象的预期布局,您可以在.proto中声明自己的类型,或者甚至不声明。名称不需要匹配,只需要字段号和类型。例如,对于protobuf net(.net),以下内容适用于您的场景:

类SomeType{
[ProtoMember(1)]public int A{get;set;}
[ProtoMember(2)]public int A{get;set;}
[ProtoMember(3)]公共bool A{get;set;}
}
...
var obj=序列化程序。反序列化(源);
控制台写入线(对象A);//int
控制台写入线(对象B);//int
控制台写入线(obj.C);//布尔

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

这些都是有用的信息!你能告诉我关于“绒毛”的剖析吗?我正在分析没有外部库的协议缓冲区创建的流。@SnailCadet规范在这里:-我链接到的站点进行解码,显示每个字节的含义