Java:来自字符串的protobuf

nev*_*_me 6 java protocol-buffers

我将 proto3 与 grpc 一起使用,我正在寻找一种更有效的方法来创建 protobuf 消息,而无需使用构建器并填充它。

如果我有一个字符串(来自 Message.toString()),我可以用该字符串重新创建消息吗?

如果我有消息类型

message TestMessage {
    bool status = 1;
    uint64 created = 2;
    TestNested submessage = 3;


    message TestNested {
        int32 messageNumber = 1;
        Entry entry = 2;
    }

    message Entry {
        int32 id = 1;
        EntryType entryType = 2;
    }

    enum EntryType {
        DEFAULT_ENTRY = 0;
        OTHER_ENTRY = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

和以下输出:

status: true
created: 1534240073415
submessage {
  messageNumber: 3
  entry{
    id: 47957
    entryType: DEFAULT_ENTRY
  }
}
Run Code Online (Sandbox Code Playgroud)

如何创建 TestMessage?我查看了 JavaDoc 以查看是否有一种parseFrom()方法可以接收字符串,但我没有获胜。

nev*_*_me 7

我正在寻找TextFormat解析器。Message.toString()打印的格式是 TextFormat 表示。

要转换回 protobuf 消息,我执行了以下操作:

TestMessage testMessage = new TestMessage.newBuilder();

CharSequence myText = "status: true\n ...";

com.google.protobuf.TextFormat.getParser().merge(myText, testMessage);
Run Code Online (Sandbox Code Playgroud)