生成的 Google 协议缓冲区 类 有未使用的字段并且超过 2000 行
Generated Google Protocol Buffer classes have unused fields and are over 2000 lines
正如标题所说,我想尝试 Google 协议缓冲区,但在从 .proto 文件编译 classes 时遇到了困难。我不确定生成的 class 应该是什么样子,它包含 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
时,生成的 class 有超过 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;
}
生成的 class 应该像这样还是我做错了什么?
注意,使用的 java 版本是 8.
是的,生成的代码非常大而且非常难看。这是生成代码的典型情况。 .proto
文件中的每个字段声明都变成了六个或更多方法,每个方法都是几行,加上用于序列化、解析、清除等的代码行。2500 行对于 protobuf 生成的代码实际上很小。
代码生成器不是很智能 -- 它基本上是一堆打印语句 -- 所以它经常生成丑陋的代码,有时它甚至会生成它最终不会使用的样板文件。
您真的不需要查看生成的代码。 :)
正如标题所说,我想尝试 Google 协议缓冲区,但在从 .proto 文件编译 classes 时遇到了困难。我不确定生成的 class 应该是什么样子,它包含 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
时,生成的 class 有超过 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;
}
生成的 class 应该像这样还是我做错了什么?
注意,使用的 java 版本是 8.
是的,生成的代码非常大而且非常难看。这是生成代码的典型情况。 .proto
文件中的每个字段声明都变成了六个或更多方法,每个方法都是几行,加上用于序列化、解析、清除等的代码行。2500 行对于 protobuf 生成的代码实际上很小。
代码生成器不是很智能 -- 它基本上是一堆打印语句 -- 所以它经常生成丑陋的代码,有时它甚至会生成它最终不会使用的样板文件。
您真的不需要查看生成的代码。 :)