十一.Protobuf3可选项
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可选项的更多相关文章
- Android学习(二十一)OptionsMenu选项菜单
一.OptionsMenu选项菜单 在应用程序中点击功能按钮会弹出选项菜单,点击可以实现具体功能. 二.实现思路: 1.创建选项菜单: onCreateOptionsMenu(); 2.设置菜单项可用 ...
- SWAT—Samba WEB管理工具
本文试验环境是RHEL5.2+samba-swat-3.0.28.Server的IP是192.168.120.241. 1. swat介绍 SWAT:The Samba WEB Administr ...
- Nmap使用指南
一.目标指定 1.CIDR标志位 192.168.1.0/24 2.指定范围 192.168.1.1-255 192.168.1-255.1(任意位置) 3.IPv6地址只能用规范的IPv6地址或主机 ...
- TCP/IP协议 (图解+秒懂+史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Tcl与Design Compiler (十一)——其他的时序约束选项(二)
本文如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 前面介绍的设计都不算很复杂,都是使用时钟的默认行为 ...
- spark第十一篇:spark-submit命令支持选项
[root@linux-node3 bin]# ./spark-submit --help Usage: spark-submit [options] <app jar | python fil ...
- Bootstrap <基础三十一>插件概览
在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...
- AngularJs的UI组件ui-Bootstrap分享(十一)——Typeahead
Typeahead指令是一个用于智能提示或自动完成的控件,就像Jquery的AutoComplete控件一样.来看一个最简单的例子: <!DOCTYPE html> <html ng ...
- C#编程总结(十一)数字证书
C#编程总结(十一)数字证书 之前已经通过文章介绍了数字证书的基础知识,包括加密和数字签名. 具体可见: 1.C#编程总结(七)数据加密——附源码 2.C#编程总结(八)数字签名 这里来讲述数字证书的 ...
随机推荐
- Windows 下使用 Composer 安装 thinkphp
我用 XAMPP 安装 thinkphp 会出错,所以把环境换成了 phpStudy,这样甚至不用到处找安装包,直接去官网有最新版本,PHP 版本也是比较新的. 安装 phpStudy 先去官网下载安 ...
- 2019年广东外语外贸大学程序设计竞赛(新手赛)-F题(好快的刀)题解
题面: 题目意为,任意连接两个圆的圆心形成一条直线,计算与该直线相交或相切的圆的数量,求这些直线最多能相交或相切多少个圆 解题思路: 遍历所有的圆,计算出两圆圆心生成的直线,再遍历其他的圆,检测这些圆 ...
- react-native-typescript-项目环境搭建
1.yarn global add create-react-native-app //全局安装 2.create-react-native-app 项目名称 3.yarn add typescrip ...
- [转帖]linux Shell sort按照指定列排序
linux Shell sort按照指定列排序 https://blog.csdn.net/weixin_38308151/article/details/80760133 kubectl get p ...
- Linux学习-文件基础权限
文件基本权限 drwxr-xr-x 第一个字符表示文件类型 d:表示是一个目录.-:表示这是一个普通的文件.l: 表示这是一个符号链接文件,实际上它指向另一个文件.b.c:分别表示区块设备和其他的外围 ...
- Ubuntu19.04 Help
Ubuntu Dock 为应用程序启用最小化操作,立即生效. $ gsettings set org.gnome.shell.extensions.dash-to-dock click-action ...
- Python学习日记(一) String函数使用
s = "abcaDa a" s2 = "123a abc ABCSAa s " s3 = "\tas \t\tb123" s4 = ' & ...
- pyenv基本使用
pyenv使用 1.安装: git clone https://github.com/pyenv/pyenv.git 2.配置pyenv环境变量 echo 'export PYENV_ROOT=&qu ...
- 数组中重复的数字(Golang)
使用哈希表 package main import "fmt" func main() { a := [...]int{2,3,1,0,2,5,3} num := make(map ...
- SAS学习笔记61 set和union的区别
好久没发博客了,水一篇,直接来代码 set的结果如下 union的结果如下