Protobuf是什么
Protobuf實際是一套類似Json或者XML的數據傳輸格式和規范,用于不同應用或進程之間進行通信時使用。通信時所傳遞的信息是通過Protobuf定義的message數據結構進行打包,然后編譯成二進制的碼流再進行傳輸或者存儲。
Protobuf的優點
相比較而言,Protobuf有如下優點:
如何安裝使用Protobuf
安裝
使用Python的話簡便的安裝方法如下
pip install protobuf # 安裝protobuf庫sudo apt-get install protobuf-compiler # 安裝protobuf編譯器
如果自己編譯安裝的話可以參考git上安裝指導,雖然寫得不清楚:)
使用
使用Protobuf有如下幾個步驟:
下面以一個實際的例子來說明如何使用Protobuf,先展示出項目的實際目錄結構:
.├── my│ ├── helloworld_pb2.py│ ├── helloworld_pb2.pyc│ └── __init__.py├── mybuffer.io├── my.helloworld.proto├── reader.py└── writer.py
定義消息
Protobuf的消息結構是通過一種叫做Protocol Buffer Language的語言進行定義和描述的,實際上Protocol Buffer Language分為兩個版本,版本2和版本3,默認不聲明的情況下使用的是版本2,下面以版本2為來舉個栗子, 假設我們定義了文件名為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
現在已經定義好了消息的數據結構,接下來看下如何使用
消息初始化和存儲傳輸
我們來通過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()
執行writer.py之后就會將序列化的結果存儲在文件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
到此這篇關于詳解Google Protobuf簡明教程的文章就介紹到這了,更多相關Google Protobuf內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持武林網!
新聞熱點
疑難解答