如标题所述,我想尝试使用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行很小。
代码生成器不是很聪明-它基本上是一堆打印语句-因此它通常会生成难看的代码,有时甚至会生成它最终没有使用的样板。
确实不希望您查看生成的代码。 :)