如何导入内部protobuf消息?

时间:2017-11-27 11:40:58

标签: java protocol-buffers

我已经读过,在proto3中,他们已经删除了知道字段是否设置的能力。作为一个解决方案,我已经在几个站点中阅读过,您可以将原语嵌入到包装器消息中。

正如您所看到的here,protobuf在wrappers.proto下面有一些内部包,以便完全按照我的需要进行操作。

我可以将这个wrappers.proto文件复制并粘贴到我的系统中,然后从另一个文件A.proto中导入它以使用它们。

但我不知道:

  1. 使用内部包装是否是一个不错的选择?

  2. 如果是这样,我可以直接从他们的jar导入而不是创建我自己的文件副本吗?

  3. (我尝试使用他们的jar目录导入,但没有用)

    import "lib/protobuf-java-3.5.0.jar/com/protobuf/wrappers.proto"; --> fails
    

    ,同时:

    import "resources/protoBeans/wrappers.proto"; --> my own copy --> works
    

1 个答案:

答案 0 :(得分:2)

你可以,而且可能最好单独创建它们 - 尽管注意子消息会增加二进制大小和处理的开销,并且与使用{{{0}的proto2消息不兼容。 1}}字段实现同样的事情。 " wrappers.proto"应该已经在protoc的二进制位置下面可用;典型用法可能是:

syntax = "proto3";
import "google/protobuf/wrappers.proto";

message Foo {
    .google.protobuf.Int32Value foo = 1;
}

使用" wrappers.proto"的另一个好处。而不是自己重新实现它,它将被视为一个着名的类型"使用定制的JSON处理和更好的"任何"支持。