Google Protocol Buffers浅析(三)
2014-04-10 18:38
218 查看
本文转自:http://www.cnblogs.com/royenhome
本文主要会介绍怎么使用Google Protocol的Lib来序列化我们的数据,方法很多种,本文只介绍其中的三种,其他的方法读者可以通过自行研究摸索。但总的来说,序列化数据总的来说分为以下俩步:
1)使用数据源填充数据结构,无论数据源来自文件还是内存还是标准输入
2)利用Lib提供的序列化接口将数据结构序列化,然后存储在内存或者磁盘上
一、填充数据结构
从数据源中获取数据,这儿的数据源可能来自磁盘上的一个文件或者内存中存储的一段数据或者来自标准输入的数据。我们需要做的就是,将AddressBook这个数据结构中的各个字段填充。本例中是通过AddressBook提供的add_person函数来获得一个Person的指针,从而对其进行填充,如下代码所示:
很容易看出,上述代码即在地址簿中添加了俩个联系人,然后又分别填充各个联系人的数据信息,通过上述代码一个地址簿的数据便准备好了。
二、序列化数据
其实通过看编译器生成的AddressBook这个类所提供的方法名,既可以大致知道有哪些序列化的方式,如下所示:
本文主要会介绍怎么使用Google Protocol的Lib来序列化我们的数据,方法很多种,本文只介绍其中的三种,其他的方法读者可以通过自行研究摸索。但总的来说,序列化数据总的来说分为以下俩步:
1)使用数据源填充数据结构,无论数据源来自文件还是内存还是标准输入
2)利用Lib提供的序列化接口将数据结构序列化,然后存储在内存或者磁盘上
一、填充数据结构
从数据源中获取数据,这儿的数据源可能来自磁盘上的一个文件或者内存中存储的一段数据或者来自标准输入的数据。我们需要做的就是,将AddressBook这个数据结构中的各个字段填充。本例中是通过AddressBook提供的add_person函数来获得一个Person的指针,从而对其进行填充,如下代码所示:
//地址簿数据定义 AddressBook addressBook; //第一个联系人的数据定义与初始化 Person *personMe = addressBook.add_person(); personMe->set_id(1); personMe->set_name("royen"); personMe->set_email("zwg19891129@163.com"); personMe->set_unsure("19bf173a0e87ab"); //第二个联系人的数据定义与初始化 Person *personHim = addressBook.add_person(); personHim->set_id(2); personHim->set_name("XXX"); personHim->set_email("XXX@XXX.com"); personHim->set_unsure("19bf173a0e87ab"); //personMe的手机号码数据定义与初始化 Person_PhoneNumber *phoneNumberMobile = personMe->add_phone(); phoneNumberMobile->set_number("15996110120"); phoneNumberMobile->set_type(Person_PhoneType_MOBILE); //personMe的座机号码数据定义与初始化 Person_PhoneNumber *phoneNumberHome = personMe->add_phone(); phoneNumberHome->set_number("0256110120"); phoneNumberHome->set_type(Person_PhoneType_HOME); //personHim的一个号码数据定义与初始化 Person_PhoneNumber *phoneNumberHim = personHim->add_phone(); phoneNumberHim->set_number("15996111111"); phoneNumberHim->set_type(Person_PhoneType_HOME);
很容易看出,上述代码即在地址簿中添加了俩个联系人,然后又分别填充各个联系人的数据信息,通过上述代码一个地址簿的数据便准备好了。
二、序列化数据
其实通过看编译器生成的AddressBook这个类所提供的方法名,既可以大致知道有哪些序列化的方式,如下所示:
相关文章推荐
- 进度条样式
- css负边距自适应布局
- JS中生成与解析JSON
- JS中生成与解析JSON
- 原始JS选择器使用方法和常用事件手册
- js判断时间是否过期
- [nodejs]npm国内npm安装nodejs modules终极解决方案
- HTML5解决跨域问题
- CSS属性clip
- The reference to entity "characterEncoding" must end with the ';' delimiter
- CSS制作水平垂直居中对齐
- Jquery获取选中的checkbox的值
- definded? and safe_constantize
- jquery常用过滤器选择器
- onchage jquery
- javascript—正则
- 深入理解JavaScript系列(39):设计模式之适配器模式
- SharedPreferences存储读取数据
- spring 返回 JSON乱码问题的解决 及个人 动态加载ztree树结构的json数据代码
- extjs中的recordType