Java:来自字符串的 protobuf

标签 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;
    }
}

以及以下输出:

status: true
created: 1534240073415
submessage {
  messageNumber: 3
  entry{
    id: 47957
    entryType: DEFAULT_ENTRY
  }
}

如何创建测试消息?我查看了 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);

关于Java:来自字符串的 protobuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52151314/

相关文章:

java - 关于我的类(class)以及为什么它没有检测到 java.awt.Color?

java - 无法解析类 org.jblas.DoubleMatrix

java - 我怎么知道 .class 文件是用哪个 Java 版本编译的?

java - 使用 JNI 将 GPB 序列化数据从 Java 高效传递到 C++

Java Socket 非阻塞读

java - Android 空指针异常 ListFragment

protocol-buffers - 不带参数的 Protobuf RPC 服务方法

protocol-buffers - 如何在 Protocol Buffer 中提供默认值?

go - 什么时候使用嵌入?

java - 无法解析符号 "newBuilder"protobuf