Java 中用于解析文本格式的协议缓冲区“ParseFromString”?
Protocol buffer `ParseFromString` in Java for parsing text format?
ParseFromString
在 Java 中是否可用于协议缓冲区?
C++版本有:here
Here is the implementation of 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
。
ParseFromString
在 Java 中是否可用于协议缓冲区?
C++版本有:here
Here is the implementation of 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
。