婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > 詳解Google Protobuf簡(jiǎn)明教程

詳解Google Protobuf簡(jiǎn)明教程

熱門標(biāo)簽:鶴壁外呼系統(tǒng)公司 外呼系統(tǒng)號(hào)顯示星號(hào)怎么看 揭陽(yáng)電腦外呼系統(tǒng)公司 高德地圖標(biāo)注常顯 銀川語(yǔ)音外呼系統(tǒng)中心 臨沂ai電銷機(jī)器人招商 承德地圖標(biāo)注公司收費(fèi) 華創(chuàng)e路航彩票銷售點(diǎn)地圖標(biāo)注 suitecrm 地圖標(biāo)注

Protobuf是什么

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

Protobuf的優(yōu)點(diǎn)

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

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

如何安裝使用Protobuf

安裝

使用Python的話簡(jiǎn)便的安裝方法如下

pip install protobuf  # 安裝protobuf庫(kù)
sudo apt-get install protobuf-compiler # 安裝protobuf編譯器

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

使用

使用Protobuf有如下幾個(gè)步驟:

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

下面以一個(gè)實(shí)際的例子來(lái)說(shuō)明如何使用Protobuf,先展示出項(xiàng)目的實(shí)際目錄結(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)是通過(guò)一種叫做Protocol Buffer Language的語(yǔ)言進(jìn)行定義和描述的,實(shí)際上Protocol Buffer Language分為兩個(gè)版本,版本2和版本3,默認(rèn)不聲明的情況下使用的是版本2,下面以版本2為來(lái)舉個(gè)栗子, 假設(shè)我們定義了文件名為my.helloworld.proto的文件,如下:

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

然后我們需要使用protoc進(jìn)行編譯

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

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

消息初始化和存儲(chǔ)傳輸

我們來(lái)通過(guò)writer.py來(lái)初始化消息并存儲(chǔ)為文件,代碼如下:

from my.helloworld_pb2 import helloworld

def 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之后就會(huì)將序列化的結(jié)果存儲(chǔ)在文件mybuffer.io中,然后看下如何讀取

消息讀取與解析

我們通過(guò)reader.py來(lái)讀取和解析消息,代碼如下:

from my.helloworld_pb2 import helloworld

def main():
  hw = helloworld()
  with open("mybuffer.io", "rb") as f:
    hw.ParseFromString(f.read())
    print hw.id
    print hw.str

if __name__ == "__main__":
  main()

Reference:

Developer Guide
Github

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

您可能感興趣的文章:
  • Protobuf的簡(jiǎn)要介紹及使用詳解
  • Protobuf在Cmake中的正確使用方法詳解

標(biāo)簽:萊蕪 三沙 忻州 汕尾 許昌 七臺(tái)河 咸寧 棗莊

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Google Protobuf簡(jiǎn)明教程》,本文關(guān)鍵詞  詳解,Google,Protobuf,簡(jiǎn)明教程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Google Protobuf簡(jiǎn)明教程》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解Google Protobuf簡(jiǎn)明教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 辉县市| 樟树市| 贵南县| 富顺县| 和田县| 游戏| 东方市| 龙门县| 古丈县| 崇阳县| 布拖县| 色达县| 宿州市| 上栗县| 景泰县| 绥阳县| 昌都县| 阳泉市| 桐庐县| 邹平县| 大足县| 甘南县| 德保县| 远安县| 金门县| 射阳县| 通渭县| 铜陵市| 策勒县| 四川省| 江川县| 司法| 小金县| 茂名市| 青海省| 滨州市| 遵义县| 泰宁县| 崇州市| 涿州市| 乌拉特中旗|