本文转自:http://www.cnblogs.com/royenhome
本文主要会介绍怎么使用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这个类所提供的方法名,既可以大致知道有哪些序列化的方式,如下所示: