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);
}
}
※Spring Boot 讀取靜態資源文件
※程序員,如何打造你的「十一」攻略?
TAG:程序員小新人學習 |