生成的Google Protocol Buffer类具有未使用的字段,超过2000行

时间:2015-08-11 18:45:24

标签: java maven serialization protocol-buffers

正如标题所说,我想尝试使用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。

1 个答案:

答案 0 :(得分:3)

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

代码生成器不是很聪明 - 它基本上是一堆打印语句 - 所以它经常产生丑陋的代码,有时它甚至会生成它最终没有使用的样板。

您真的不希望看到生成的代码。 :)