在google协议缓冲区中,存在一个文本版本的消息。在解析这个文本消息时,我们能否定义回调函数,以便将解析的信息存储到我们自己的数据结构中?例如,如果我们已经定义了。原型:
message A {
required string name = 1;
optional string value =2;
repeated B bList =3;
}
message B {
required string name =1;
optional string value =2;
}
我们有文本格式的信息:
A {
name: "x"
value: "123"
B {
name: "y"
value: "987"
}
B {
name: "z"
value: "965"
}
}
protobuf编译器生成名为“A”的相应类,名为“B”的类。解析器可以将这种文本格式解析为A的实例。但是,如果用户想要定义我们自己版本的类“A”,或者存在以前使用过的A的版本。现在,由于我们想用google protocol buffer替换旧的exchange格式,我们愿意将google protocol buffer文本格式版本直接解析到旧的数据结构中。如果没有,我们必须首先填充生成的数据结构(A类),然后将生成的数据结构调整为遗留数据结构。它占用的内存是必需的两倍。它的效率可能比我们想要的低得多。集成解析器的传统方法是使用一个解析器,该解析器可以回调自定义的函子以适应新的数据结构。那么,是否存在将自定义回调函数注入文本格式解析器的方法?
不,协议的文本格式实现不支持这样的扩展。
也就是说,TextFormat(至少在C、Java和Python中)是作为一个自包含模块实现的,它只在公共接口(主要是反射接口)上运行。您可以轻松地克隆它,然后对格式进行自己的修改,甚至可以用实现任意格式的相同样式编写一个全新的模块。例如,许多人以TextFormat实现为指导,基于Protobuf反射编写了JSON解析器/编码器。
问题内容: 是否可以在Java中的协议缓冲区? C ++版本具有它:在这里 问题答案: 这是ParseFromString的实现(请注意,只需调用一个新对象): 您可以看到只是清除了消息,然后调用。尽管协议缓冲区的Java实现没有方法,但是您可以轻松实现它:
是否有可能解析传入的google协议缓冲区数据报而不使用任何缓冲区。原始文件?我只是现在使用协议缓冲区对其进行了序列化,但不知道IDL文件。 我在寻找一种通过某种反射来迭代任何值的方法?这可能吗? 非常感谢。
根据示例代码https://developers.google.com/protocol-buffers/docs/cpptutorial,它们展示了如何解析二进制格式的原始文件。使用 我尝试删除文本格式的输入文件的,但在读取文件时仍然失败。我需要做什么才能读取文本格式的原始文件?
是一个序列化协议缓冲区,如果不使用,则很难解析。proto/从中编译的类?
在阅读这个相当长的问题之前,我提出了一个bughttps://github.com/GoogleCloudPlatform/python-docs-samples/issues/1103. 原型包和名称解析的留档状态 您可以使用其他定义。通过导入原始文件。导入另一个。在proto的定义中,您可以在文件的顶部添加一条import语句。 我的依赖于annotations.proto将HTTP/JSON
问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我想知道的优点和缺点 Google协议缓冲区 JSON格式 XML格式 我想为两个应用程序实现一个通用框架,一个在Perl中,第二个在Java中。因此,希望创