本文轉自: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("[email protected]");
personMe->set_unsure("19bf173a0e87ab");
//第二個聯繫人的數據定義與初始化
Person *personHim = addressBook.add_person();
personHim->set_id(2);
personHim->set_name("XXX");
personHim->set_email("[email protected]");
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這個類所提供的方法名,既可以大致知道有哪些序列化的方式,如下所示: