syntax = "proto2"; //包声明,防止在不同的项目内出现命名冲突 package tutorial; //默认使用上面package的,除非显示声明 option java_package = "com.example.tutorial"; //包含以下所有的类的类,如果此配置存在,默认使用proto的文件名 option java_outer_classname = "AddressBookProtos"; //message 包含一组类型字段 //支持 bool int32 float double string // 也可以用使用其他自定义类型,比如下面的PhoneNumber //下面的123标识字段唯一的标签在二进制编码时. //1-15仅仅只需要1一个字节.为了更优化的使用,小于16的tag给常见或者重复的元素. //重复此段每次都需要重复编码,所以重复字段通常使用这种方法优化. //每一个字段声明时都必须要有以下修饰法(required,optional,repeated) //1.required,字段的值必须存在,要不然信息将被当作为初始化处理,构建一个未初始化的信息将会抛出RuntimeException.解析一个未初始化对象会抛出IOException //2.optional,字段可能不会被设置,如果未被设置,设置成默认值.对于简单类型,你可以指定自己的默认值,要不然系统给予一个默认值,数值类型默认为0 // string给空串,bool是false,对于内置的消息,默认值总是default instance or prototype of the message,它没有任何一个字段.调用optional字段的 // get方法(required),当没有显示设置get方式时,返回默认值. //3.repeated,这个字段可以重复很多次(包括0次),重复的值保存在协议缓冲内,将其看作一个size是动态的数组. message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default =HOME]; } } repeated PhoneNumber phones = 4; message AddressBook { repeated Person people =1; }
./configure --prefix=$INSTALL_DIR
make
make check
make install
//编译你的protocol buffers //1.please install protobuf,if not baidu //2.安装完就可以运行编译器了,指定源码目录