最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年02月27日 10:40:44   作者:geekpy  
這篇文章主要介紹了詳解Google Protobuf簡(jiǎn)明教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • yum的基本用法和實(shí)例(推薦)

    yum的基本用法和實(shí)例(推薦)

    這篇文章主要介紹了Linux(centos8)下的yum的基本用法和實(shí)例,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 詳解cron表達(dá)式

    詳解cron表達(dá)式

    Cron表達(dá)式是一個(gè)字符串,字符串以5或6個(gè)空格隔開,分為6或7個(gè)域,每一個(gè)域代表一個(gè)含義。接下來(lái)通過(guò)本文給大家詳細(xì)介紹cron表達(dá)式內(nèi)容,感興趣的朋友一起看看吧
    2018-04-04
  • 使用Python解決Windows文件名非用反斜杠問題(python 小技巧)

    使用Python解決Windows文件名非用反斜杠問題(python 小技巧)

    要想讓你的 Python 代碼同時(shí)在 Windows 和 Mac/Linux 上工作,你需要處理不同系統(tǒng)文件名用不同斜杠的問題。而 Python 3 有一個(gè)名為「pathlib」的新模塊,可以幫你解決這個(gè)麻煩,需要的朋友可以參考下
    2019-11-11
  • Git別名的使用

    Git別名的使用

    這篇文章主要介紹了Git別名的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • tcp、udp、ip協(xié)議分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    tcp、udp、ip協(xié)議分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了tcp、udp、ip協(xié)議分析的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • vscode單擊新文件時(shí)覆蓋舊文件的解決方法

    vscode單擊新文件時(shí)覆蓋舊文件的解決方法

    本文是給大家分享的作者在使用vscoe過(guò)程中遇到的一個(gè)小問題的解決方法,就是取消vscode單擊新文件時(shí)覆蓋舊文件,希望對(duì)大家能夠有所幫助
    2020-02-02
  • vs?code開發(fā)中語(yǔ)法正確但顯示報(bào)錯(cuò)問題分析解決

    vs?code開發(fā)中語(yǔ)法正確但顯示報(bào)錯(cuò)問題分析解決

    這篇文章主要為大家介紹了vs?code開發(fā)中語(yǔ)法正確但顯示報(bào)錯(cuò)問題分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 12種最常用的網(wǎng)頁(yè)編程語(yǔ)言簡(jiǎn)介(值得收藏)

    12種最常用的網(wǎng)頁(yè)編程語(yǔ)言簡(jiǎn)介(值得收藏)

    隨著網(wǎng)站的越來(lái)越普及,與Web相關(guān)的開發(fā)技術(shù)持續(xù)熱門,從開始簡(jiǎn)單的html到復(fù)雜的web開發(fā)語(yǔ)言asp、asp.net、php、jsp等等,在此,我就借助SEO馬龍博客的平臺(tái)跟大家簡(jiǎn)單的介紹一下常見的12種網(wǎng)頁(yè)編程語(yǔ)言
    2017-01-01
  • idea中的project、module、artifact的具體使用

    idea中的project、module、artifact的具體使用

    本文主要介紹了idea中的project、module、artifact的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Mac安裝軟件時(shí)提示已損壞的完美解決方法

    Mac安裝軟件時(shí)提示已損壞的完美解決方法

    從網(wǎng)上下載的SecureCRT、Principle等設(shè)計(jì)軟件,以及輸入法等常用軟件,安裝時(shí)可能會(huì)提示“已損壞,移至廢紙簍”這類信息,根本無(wú)法打開,這篇文章主要介紹了Mac安裝軟件時(shí)提示已損壞的解決方法,需要的朋友可以參考下
    2022-07-07

最新評(píng)論

岳阳市| 彩票| 天等县| 岐山县| 石台县| 浦北县| 沙田区| 醴陵市| 黔南| 法库县| 五台县| 常山县| 灵宝市| 濮阳县| 泰顺县| 天镇县| 通河县| 中牟县| 沛县| 大石桥市| 阿拉善左旗| 枣阳市| 广德县| 中超| 榆林市| 芷江| 贞丰县| 中卫市| 阳高县| 博白县| 琼结县| 澄迈县| 阿鲁科尔沁旗| 怀来县| 甘谷县| 仪陇县| 汝州市| 巴彦淖尔市| 都安| 赤壁市| 囊谦县|