當前位置:
首頁 > 知識 > protobuf深入講解

protobuf深入講解

工作中的總結:

Protobuf是一款與平台無關、語言無關、可擴展的序列化結構數據格式。很適合用做數據存儲和作為不同應用,不同語言之間進行相互通信的數據交換格式。一個proto文件可以聲明多個message,在編譯的時候他們將會編譯成不同的類。其中每個message中聲明欄位的類型有required、optional 、repeated三種類型,required聲明的欄位其值時必須要設置的,optional 聲明的欄位其值是可選擇的,repeated聲明的欄位其值是可以重複使用的,這裡可以理解為c++中的數組。另外,protobuf的靈魂就是它的反射機制,Descriptor類用來描述消息,可以通過該類獲取到該消息中欄位的個數以及通過欄位名獲取欄位等。FieldDescriptor類用來描述欄位,可以通過該類獲取欄位的一些屬性。Reflection類可以對欄位的內容進行存取。

附錄:

如何遍歷整個欄位

const ::google::protobuf::Descriptor *descriptor = protobuf.GetDescriptor();

const ::google::protobuf::Reflection *reflection = protobuf.GetReflection();

if (!descriptor || !reflection)

{

return;

}

int counts = descriptor->field_count();

for (int i = 0; i < counts; i++)

{

const ::google::protobuf::FieldDescriptor *fieldDesc = descriptor->field(i);

if (!fieldDesc)

{

continue;

}

if (fieldDesc->type() == ::google::protobuf::FieldDescriptor::TYPE_UINT32)

{

reflection->SetUInt32(&protobuf, fieldDesc, 0);

}

}

protobuf深入講解

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Spring Boot 讀取靜態資源文件
程序員,如何打造你的「十一」攻略?

TAG:程序員小新人學習 |