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

ParseFromString在Java中是否可用于协议缓冲区?

C ++版本有它: 这里

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

 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 。 虽然Protocol Buffers的Java实现没有Parse方法,但您可以轻松实现它:

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

对于消息A ,方法TextFormat.getParser().merge(str, builder); 可以。 例如:

  AOuterClass.A.Builder buildA = AOuterClass.A.newBuilder(); buildA.setName("Abra Kadabra"); buildA.addPrices(3.14); buildA.addPrices(3.141592); AOuterClass.A aaa = buildA.build(); String str = aaa.toString(); AOuterClass.A.Builder builder = AOuterClass.A.newBuilder(); /////////////////////////////////////////// TextFormat.getParser().merge(str, builder); System.out.println(builder.build().equals(aaa)); //true 

proto3测试。