Protocol Buffers
各位亲 有时间可以去看看我的 “金骏家居淘宝店” http://jinjun1688.taobao.com/shop/view_shop.htm?tracelog=twddp 买时说明在我的博客看到有优惠哦 还有意外礼品赠送 真正的程序员淘宝店
今日任务:生成协议 执行序列化与反序列化
protocol buffer :一种跨平台,支持多种语言,扩展性好的用于通讯协议,数据存储的的结构化数据串行化方法。
一 在mac上安装protocol buffer的基本步骤
1) 下载相应文件并解压到本地文件夹
2) 确定电脑是否安装gcc 若没有则独立安装:Xcode->Preferences->Downloads下的Components下,安装command Line Tools。
3) 切换到管理员身份
4) 在终端下进入到protobuf文件夹。
5) 在终端下依次输入:
./configure
make
make check
make install
二 编写一个简单的proto文件
创建一个扩展名为.proto的文件
message day01{
required int64 a=1;
optional string b=2;
repeated float Id=3;
}
解析:1. message是消息定义的关键字,类似与struct
2. day01消息名字,等同于类名
3. required 表明该字段是必要字段,保证在序列化与反序列化的时候必须要赋值。
optional字段未初始化就会有一个默认值赋予该字段,也可以指定默认值。
repeated表明该字段可以重复多个
4. 标签数字1和2。。。则表示不同字段在序列化后的二进制数据中的布局位置。且标签指不能重复。标签值处于1-15的字段在编码时能得到优化,即标签值和类型信息仅占一个字节,标签值早16-2047的占两个bytes。ProtocolBuffer可以支持字段数量为2的29次方-1.由于repeated时消息必要字段,则尽量使其字段处于1-15之间。
三 定义protocol Buffer消息也可以含有枚举,但protocol Buffer的枚举不同与c++/java 枚举值之间用分号而不是逗号。
enum ptr{
offline=0;
online=1;
}
message day01_1{
requiredint64 ID=1;
requiredstring name=2;
optional double start=3;
}
四 嵌套消息字段
enum ptr{
offline=0;
online=1;
}
message day01_1{
requiredint64 ID=1;
requiredstring name=2;
optionaldouble start=3;
}
message day01_2{
requiredday01_1 Temp=1;
requiredstring buf=2;
}
五 命令行编译工具
protoc--proto_path=“proto文件所在目录” --cpp_out=“proto文件所在目录”=“proto文件所在目录”/foo.proto
总结:1)每个消息中至少包含有一个required类型的字段
2)使用protocol buffer 编译器来生成的代码,一般为.h和.cc文件
3)每一个字段会生成一个has函数(has_number) clear清除函数(clear_number) set函数(set_number) get函数(number和mutable_number)