当前位置: 首页 > 面试题库 >

Java中用于解析文本格式的协议缓冲区“ ParseFromString”?

胡玉书
2023-03-14
问题内容

是否ParseFromString可以在Java中的协议缓冲区?

C
++版本具有它:在这里


问题答案:

这是ParseFromString的实现(请注意,TextFormat::ParseFromString只需调用TextFormat::Parser::ParseFromString一个新Parser对象):

bool TextFormat::Parser::Parse(io::ZeroCopyInputStream* input,
                               Message* output) {
  output->Clear();
  return Merge(input, output);
}

bool TextFormat::Parser::ParseFromString(const string& input,
                                         Message* output) {
  io::ArrayInputStream input_stream(input.data(), input.size());
  return Parse(&input_stream, output);
}

您可以看到Parse只是清除了消息,然后调用Merge。尽管协议缓冲区的Java实现没有Parse方法,但是您可以轻松实现它:

public static void parseFromString(CharSequence input, ExtensionRegistry extensionRegistry, Message.Builder builder) throws ParseException {
    builder.clear();
    TextFormat.merge(input, extensionRegistry, builder);
}


 类似资料:
  • 根据示例代码https://developers.google.com/protocol-buffers/docs/cpptutorial,它们展示了如何解析二进制格式的原始文件。使用 我尝试删除文本格式的输入文件的,但在读取文件时仍然失败。我需要做什么才能读取文本格式的原始文件?

  • 问题内容: 我正在尝试动态解析Java中的给定.proto文件,以解码Protobuf编码的二进制文件。 我有以下解析方法,其中“ proto”字符串包含.proto文件的内容: 但是,执行时,先前的方法将引发消息“协议消息标签的电线类型无效”的异常。我使用了来自Google的示例.proto文件,因此我认为它是有效的:https : //github.com/google/protobuf/bl

  • 在阅读这个相当长的问题之前,我提出了一个bughttps://github.com/GoogleCloudPlatform/python-docs-samples/issues/1103. 原型包和名称解析的留档状态 您可以使用其他定义。通过导入原始文件。导入另一个。在proto的定义中,您可以在文件的顶部添加一条import语句。 我的依赖于annotations.proto将HTTP/JSON

  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 我试图安装Caffe库,但我有一个编译问题,由于一个错误的原型版本安装在我的系统。 我在论坛上遵循了许多提议的方法,我认为在这篇帖子中讨论了最类似的问题。 在caffe.pb.h中控件是: 但是在我的系统标头(/usr/include/google/cript buf/stubs/Common. h)中: 命令protoc--version从终端返回libprotoc 3.2.0。 所以我安装了3

  • 我不小心安装了3.0.0版,我的大多数文件自然产生了大量错误。现在我想把它带回2.6.1。我已经下载了2.6.1并安装了,但是当我做时,它仍然显示,这是错误的。 有办法将版本设置为2.6.1还是有办法卸载3.0.0?