Protobuf的optimize_for使用详解

编写好的*.proto协议在编译的时候可以根据自己需要改变optimize_for类型(option optimize_for=**)。

optimize_for有三个选项:

  • SPEED:(默认选项,表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。使用protobufer提供的反射功能)
  • CODE_SIZE:和SPEED相反,代码运行效率较低,但是由此生成的代码编译后会占用更少的空间,通常用于资源有限的平台,如Mobile。
  • LITE_RUNTIME:生成的代码执行效率高,同时生成代码编译后的所占用的空间也是非常少。这是以牺牲Protocol Buffer提供的反射功能为代价的。因此我们在C++中链接Protocol Buffer库时仅需链接libprotobuf-lite,而非libprotobuf。在Java中仅需包含protobuf-java-2.4.1-lite.jar,而非protobuf-java-2.4.1.jar。

※注:当optimize_for的选项为LITE_RUNTIME时继承自MessageLite类而非Message类,MessageLite接口是Message的父接口,在MessageLite中将缺少Protocol Buffer对反射的支持,而此功能均在Message接口中提供了接口规范,同时又在其实现类GeneratedMessage中给予了最小功能的实现。