protocol-buffers - 在没有它们的情况下解析协议缓冲区数据
问题描述
如果不使用从它编译的 .proto/a 类,序列化的协议缓冲区是否难以解析?
显然,使用 .proto 更容易。我想知道如果没有它们,使用协议缓冲区序列化的数据结构是否可以轻松解析,给定数据的其他一些描述符。即,如果解析我的数据(使用协议缓冲区序列化)的代码知道它需要两个整数和一个布尔值,那么解析这些值是否容易?或者协议缓冲区是否添加了额外的填充/绒毛?
解决方案
如果解析我的数据(使用协议缓冲区序列化)的代码知道它需要两个整数和一个布尔值,那么解析这些值是否容易?
当然; 你甚至不需要知道——这是一个工具,它会尝试在没有任何模式数据的情况下解码未知的 protobuf,但有一些警告,一些数据可能不明确。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
有额外的“填充/绒毛”,这就是我推荐阅读器/解析器库的原因,但是......这并不难。
推荐阅读
- sql - 将表中的列更新为 2 个不同的值
- javascript - 根据下拉值显示 div
- django - 如何将条带支付与现有的 django 表单集成,并且仅在支付成功时保存表单
- angular - 自定义电子邮件指令 Angular 7
- windows - 在 zeit/pkg npm 中找不到包含的 .ps1 文件以运行 node-powershell 命令
- javascript - Electron.js 错误:未定义要求
- c# - 在没有 DBSet 的情况下使用 c#linq 执行 SQL Server 存储过程
- javascript - 带有方形单元格的 HTML 表格适合屏幕高度
- javascript - 在 javascript var 中存储 JSON 值
- r - R:读取行的子集并将其转换为常规格式(首选 data.table 方法)