如标题所述,我想尝试使用Google协议缓冲区,但无法从.proto文件中编译类。我不确定生成的类应该是什么样,它包含2500行是否正常?

这是Maven项目,我包括以下依赖项:

    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>2.6.1</version>
    </dependency>


并且protoc.exe与.proto文件位于同一目录中。

我正在按照google docs中的示例进行操作,但是当我尝试编译addressbook.proto时,生成的类具有2500多行和未使用的字段,例如:int mutable_bitField0_ = 0;

生成的代码对我来说很奇怪,里面是这样的:

 com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }


生成的类应该看起来像这样吗,还是我做错了什么?

注意,使用的Java版本是8。

最佳答案

是的,生成的代码非常大且非常难看。这对于生成的代码是典型的。 .proto文件中的每个字段声明都变成了六个或更多方法,每个方法都是几行,加上要序列化,解析,清除等的代码行。对于protobuf生成的代码,实际上2500行很小。

代码生成器不是很聪明-它基本上是一堆打印语句-因此它通常会生成难看的代码,有时甚至会生成它最终没有使用的样板。

确实不希望您查看生成的代码。 :)

09-10 14:09
查看更多