我正在使用带有grpc的proto3,并且正在寻找一种更有效的方式来创建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;
    }
}

和下面的输出:
status: true
created: 1534240073415
submessage {
  messageNumber: 3
  entry{
    id: 47957
    entryType: DEFAULT_ENTRY
  }
}

如何创建TestMessage?我看了看JavaDoc,看是否有一个parseFrom()方法接受一个字符串,但是我没有赢。

最佳答案

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

为了转换回protobuf消息,我做了以下工作:

TestMessage testMessage = new TestMessage.newBuilder();

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

com.google.protobuf.TextFormat.getParser().merge(myText, testMessage);

09-19 21:04