国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

詳解Google Protobuf簡明教程

2024-07-21 02:03:16
字體:
供稿:網(wǎng)友

Protobuf是什么

Protobuf實際是一套類似Json或者XML的數(shù)據(jù)傳輸格式和規(guī)范,用于不同應(yīng)用或進程之間進行通信時使用。通信時所傳遞的信息是通過Protobuf定義的message數(shù)據(jù)結(jié)構(gòu)進行打包,然后編譯成二進制的碼流再進行傳輸或者存儲。

Protobuf的優(yōu)點

相比較而言,Protobuf有如下優(yōu)點:

  • 足夠簡單
  • 序列化后體積很小:消息大小只需要XML的1/10 ~ 1/3
  • 解析速度快:解析速度比XML快20 ~ 100倍
  • 多語言支持
  • 更好的兼容性,Protobuf設(shè)計的一個原則就是要能夠很好的支持向下或向上兼容

如何安裝使用Protobuf

安裝

使用Python的話簡便的安裝方法如下

pip install protobuf  # 安裝protobuf庫sudo apt-get install protobuf-compiler # 安裝protobuf編譯器

如果自己編譯安裝的話可以參考git上安裝指導(dǎo),雖然寫得不清楚:)

使用

使用Protobuf有如下幾個步驟:

  • 定義消息
  • 初始化消息以及存儲傳輸消息
  • 讀取消息并解析

下面以一個實際的例子來說明如何使用Protobuf,先展示出項目的實際目錄結(jié)構(gòu):

.├── my│  ├── helloworld_pb2.py│  ├── helloworld_pb2.pyc│  └── __init__.py├── mybuffer.io├── my.helloworld.proto├── reader.py└── writer.py

定義消息

Protobuf的消息結(jié)構(gòu)是通過一種叫做Protocol Buffer Language的語言進行定義和描述的,實際上Protocol Buffer Language分為兩個版本,版本2和版本3,默認不聲明的情況下使用的是版本2,下面以版本2為來舉個栗子, 假設(shè)我們定義了文件名為my.helloworld.proto的文件,如下:

package my;message helloworld{  required int32 id = 1;  required string str = 2;  optional int32 wow = 3;}

然后我們需要使用protoc進行編譯

protoc -I=./ --python_out=./ ./my.helloworld.proto
  • -I: 是設(shè)定源路徑
  • --python_out: 用于設(shè)定編譯后的輸出結(jié)果,如果使用其它語言請使用對應(yīng)語言的option
  • 最后一個參數(shù)是你要編譯的proto文件

現(xiàn)在已經(jīng)定義好了消息的數(shù)據(jù)結(jié)構(gòu),接下來看下如何使用

消息初始化和存儲傳輸

我們來通過writer.py來初始化消息并存儲為文件,代碼如下:

from my.helloworld_pb2 import helloworlddef main():  hw = helloworld()  hw.id = 123  hw.str = "eric"  print hw  with open("mybuffer.io", "wb") as f:    f.write(hw.SerializeToString())if __name__ == "__main__":  main()

執(zhí)行writer.py之后就會將序列化的結(jié)果存儲在文件mybuffer.io中,然后看下如何讀取

消息讀取與解析

我們通過reader.py來讀取和解析消息,代碼如下:

from my.helloworld_pb2 import helloworlddef main():  hw = helloworld()  with open("mybuffer.io", "rb") as f:    hw.ParseFromString(f.read())    print hw.id    print hw.strif __name__ == "__main__":  main()

Reference:

Developer Guide
Github

到此這篇關(guān)于詳解Google Protobuf簡明教程的文章就介紹到這了,更多相關(guān)Google Protobuf內(nèi)容請搜索武林網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持武林網(wǎng)!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贞丰县| 临城县| 酒泉市| 阜南县| 陕西省| 清涧县| 通江县| 邯郸县| 漳平市| 海口市| 英吉沙县| 汝城县| 积石山| 巴东县| 宜章县| 绥中县| 莒南县| 青龙| 望谟县| 八宿县| 崇明县| 西昌市| 木兰县| 湘乡市| 永登县| 张家川| 建阳市| 瑞金市| 应城市| 大港区| 本溪| 凌云县| 伊宁县| 巫溪县| 赣州市| 江达县| 河北区| 黄大仙区| 宜兰县| 西贡区| 安国市|