日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

「ProtocolBuffers2」ProtocolBuffers2 c++简易入门

發(fā)布時間:2024/9/27 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「ProtocolBuffers2」ProtocolBuffers2 c++简易入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

官網(wǎng)的快速入門
官網(wǎng)的詳細(xì)教程
c++api參考
c++生成代碼說明
pb編碼參考

下文中提到的pb是protocol buffers的縮寫

什么是protocol buffers

pb是谷歌推出的序列化結(jié)構(gòu)數(shù)據(jù)的一種方法,提供高效、快速、簡便的數(shù)據(jù)編碼,支持的語言包括python,c++,java,oc等。本文以C++為例。

定義一個message

message顧名思義就是消息的意思,在pb中message類似于c++或python中的類,但也只是在形式上類似,定義一個message就相當(dāng)于定義了一種消息類型。

message SearchRequest {required string query = 1;optional int32 page_number = 2;optional int32 result_per_page = 3; }

在上面的例子中,定義了一個名為SearchRequest的message,在該條message中聲明了三個域,分別是string類型的query、int32型的page_number和int32型的result_per_page。

三個域分別對應(yīng)獨一無二的三個數(shù)字1、2、3,如果有第四個域的話,那么它的編號是4,以此類推。每個域?qū)?yīng)的序號第幾位沒有要求,一旦使用就不能再修改;且每個域的編號不能重復(fù)。這些數(shù)字用于消息二進(jìn)制編碼中區(qū)分不同的域,其中1-15的編碼只占1個字節(jié)的內(nèi)存,16-2047占兩個字節(jié)內(nèi)存,因此最好將一些常用的域放在1-15號編號中,便于提高讀取效率。

此外,19000到19999是不能使用的,留作pb內(nèi)部部署,如果使用的話會報錯。

域類型

從上面中我們可以看到,每個域有不同類型。在pb中,域類型一共有三種:

  • required:一個message中必須帶有該類型的域,一般不使用,容易導(dǎo)致bug
  • optional:一個message中最多帶一個該類型的域
  • repeated:一個message中的該域可以重復(fù)多次,包括零;意思是接收該域時存儲的是一個域的有序序列

此外還有一個點需要注意一下,官網(wǎng)說由于過去的原因,repeated類型的域為int32,int64,enum等類型時,并不能進(jìn)行高效的編碼,因此新的生命可以通過使用在域聲明最后加上一個[packed=true]來提高編碼效率,例如:

repeated int32 samples = 4 [packed=true]; repeated ProtoEnum results = 5 [packed=true];

總結(jié)

以上是生活随笔為你收集整理的「ProtocolBuffers2」ProtocolBuffers2 c++简易入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。