Protobuf3 可选项

.proto文件中可以声明许多选项。选项不会改变声明的整体含义,但可能会影响在特定上下文中处理声明的方式。可用选项的完整列表在google/protobuf/descriptor.proto中定义

有些选项是文件级选项,这意味着它们应该写在顶级范围内,而不是任何消息、枚举或服务定义内。有些选项是消息级选项,这意味着它们应该写在消息定义中。有些选项是字段级选项,这意味着它们应该写在字段定义中。选项也可以写在枚举类型、枚举值、服务类型和服务方法上;然而,目前没有任何有用的选择。

以下是一些最常用的选项:

java_package (file option): 用于生成的Java类的包。如果.proto文件中没有给出明确的Java _ package选项,那么默认情况下将使用proto package (在.proto文件中使用“package”关键字指定)。然而,proto包通常不能成为好的Java包,因为proto包不应该以反向域名开始。如果不生成Java代码,则此选项无效。

option java_package = "com.example.foo";

java_multiple_files (file option):  导致顶层消息、枚举和服务在包级别定义,而不是在以.proto文件命名的外部类中定义。

option java_multiple_files = true;

java_outer_classname (file option): 要生成的最外面的Java类的类名(因此也是文件名)。如果.proto文件中未指定显式 java_outer_classname,则类名将通过转换来构造。原型文件名转换为ccamel-case(因此foo_bar.proto变成了FooBar.java)。如果不生成Java代码,则此选项无效。

option java_outer_classname = "Ponycopter";

optimize_for (file option): 可以设置为SPEED、CODE_SIZE或LITE_RUNTIME。这会以以下方式影响c++和Java代码生成器(以及可能的第三方生成器) :

SPEED (default): 协议缓冲区编译器将生成用于序列化、解析和对消息类型执行其他常见操作的代码。这个代码是高度优化的。

CODE_SIZE: 协议缓冲编译器将生成最少的类,并将依赖共享的、基于反射的代码来实现序列化、解析和各种其他操作。因此,生成的代码将比速度小得多,但是操作将会更慢。类仍将实现与它们在速度模式下完全相同的公共API。这种模式在包含大量.proto文件的应用程序中非常有用,并且不需要所有这些文件都非常快。

LITE_RUNTIME: 协议缓冲编译器将生成仅依赖于“lite”运行时库( ibprotobuf-lite而不是libprotobuf )的类。lite运行时比整个库小得多(大约小一个数量级),但省略了某些功能,如描述符和反射。这对在手机等受限平台上运行的应用程序特别有用。编译器仍然会生成所有方法的快速实现,就像在速度模式下一样。生成的类将只实现每种语言的MessageLite接口,它只提供完整消息接口方法的子集。

option optimize_for = CODE_SIZE;

cc_enable_arenas (file option): 为c++生成的代码启用竞技场分配。

objc_class_prefix (file option): 设置Objective-C类前缀,该前缀加在所有Objective-C生成的类和该. proto中的枚举之前。没有默认值。按照Apple的建议,您应该使用3 - 5个大写字符之间的前缀。请注意,Apple保留了所有2个字母前缀。

deprecated (field option): 如果设置为true,则表示该字段已过时,不应由新代码使用。在大多数语言中,这没有实际效果。在Java中,这变成了一个@Deprecated annotation的注释。将来,其他语言特定的代码生成器可能会在该字段的访问者上生成折旧注释,这反过来会在编译试图使用该字段的代码时发出警告。如果该字段未被任何人使用,并且您希望阻止新用户使用它,请考虑用保留语句替换字段声明。

int32 old_field = 6 [deprecated=true];

自定义选项

协议缓冲区还允许您定义和使用自己的选项,这是大多数人不需要的高级功能,如果你确实认为你需要创建自己的选项,请参见proto 2语言指南了解详细信息。请注意,创建自定义选项使用扩展,这仅允许用于proto 3中的自定义选项。

十一.Protobuf3可选项的更多相关文章

  1. Android学习(二十一)OptionsMenu选项菜单

    一.OptionsMenu选项菜单 在应用程序中点击功能按钮会弹出选项菜单,点击可以实现具体功能. 二.实现思路: 1.创建选项菜单: onCreateOptionsMenu(); 2.设置菜单项可用 ...

  2. SWAT—Samba WEB管理工具

    本文试验环境是RHEL5.2+samba-swat-3.0.28.Server的IP是192.168.120.241.   1. swat介绍 SWAT:The Samba WEB Administr ...

  3. Nmap使用指南

    一.目标指定 1.CIDR标志位 192.168.1.0/24 2.指定范围 192.168.1.1-255 192.168.1-255.1(任意位置) 3.IPv6地址只能用规范的IPv6地址或主机 ...

  4. TCP/IP协议 (图解+秒懂+史上最全)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  5. Tcl与Design Compiler (十一)——其他的时序约束选项(二)

    本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 前面介绍的设计都不算很复杂,都是使用时钟的默认行为 ...

  6. spark第十一篇:spark-submit命令支持选项

    [root@linux-node3 bin]# ./spark-submit --help Usage: spark-submit [options] <app jar | python fil ...

  7. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  8. AngularJs的UI组件ui-Bootstrap分享(十一)——Typeahead

    Typeahead指令是一个用于智能提示或自动完成的控件,就像Jquery的AutoComplete控件一样.来看一个最简单的例子: <!DOCTYPE html> <html ng ...

  9. C#编程总结(十一)数字证书

    C#编程总结(十一)数字证书 之前已经通过文章介绍了数字证书的基础知识,包括加密和数字签名. 具体可见: 1.C#编程总结(七)数据加密——附源码 2.C#编程总结(八)数字签名 这里来讲述数字证书的 ...

随机推荐

  1. 超实用的 JavaScript 代码片段( ES6+ 编写)

    Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...

  2. Spring Boot取消默认tomcat启动,打成war包发布到服务器运行

    一.设置打包方式 在pom.xml中设置打包格式 <packaging>war</packaging> 二.取消Spring Boot的tomcat <!--部署成war ...

  3. noip2019集训测试赛(二十一)Problem A: Colorful Balls

    Problem A: Colorful Balls Description Snuke放了N个一排彩色的球.从左起第i个球的颜色是ci重量是wi她可以通过执行两种操作对这些球重新排序操作1:选择两个相 ...

  4. fwrite & fread 的使用

    每一次切换文件操作模式必须调用fclose关闭文件. 如果直接切换操作模式,文件将损坏(出现乱码)或操作失败. 在调用了fclose时,作为参数的文件指针将被回收,必须再次定义,因此最好将功能封装. ...

  5. c++ 基础学习(二)—— IO 对象

    1. IO 类 c++ 语言不能直接处理输入输出,而是通过一族定义在标准库中的类型来处理 IO,这些类型支持设备读取数据,向设备写入数据的 IO 的数据操作. istream 输入流类型,提供输入操作 ...

  6. 函数的练习1——python编程从入门到实践

    8-1 消息: 编写一个名为display_message()的函数,它打印一个句子指出你在本章学的是什么.调用这个函数,确认显示的消息正确无误. def display_message(): pri ...

  7. Linux基础系统优化(二)

    SELinux功能 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,这个功能管理员又爱又恨,大多数生产环境也是关闭的做法,安全手段使 ...

  8. 终于明白六大类UML类图关系了

    UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...

  9. [高清] Spring揭秘完整高清版

      ------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- ...

  10. docker 执行 docker system prune 导致Azure Devops build镜像失败

    运行docker的centos上, 只分配了16G的空间, 装了个mysql, 还有个rancher, 就只剩下2G的空间了, Azure Devops build镜像就出错了, 显示存储空间不足, ...