菜菜

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
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.安装完就可以运行编译器了,指定源码目录

 

posted on 2019-01-08 18:42  好吧,就是菜菜  阅读(163)  评论(0编辑  收藏  举报