正如标题所说,我想尝试谷歌协议缓冲区,但卡住了从。proto文件编译类。我不确定应该如何生成类看起来像,它是正常的,它包含2500行。
这是maven项目,我包含了以下依赖项:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.1</version>
</dependency>
和protoc.exe与.proto文件在同一目录。
我下面的例子从谷歌文档,然而,当我试图编译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
文件中的每个字段声明都变成了六个或更多的方法,每个方法都是几行,加上序列化,解析,清除等代码行,2500行对于protobuf生成的代码来说实际上是非常小的。
代码生成器不是很智能——它基本上是一堆打印语句——所以它经常生成丑陋的代码,有时它甚至会生成它最终不会使用的样板文件。
您确实不需要查看生成的代码。:)