1. 程式人生 > >Protobuf使用(一)

Protobuf使用(一)

參考資料 repeat ase 安裝 新版本 目前 編程 圖片 toc

Protobuf使用(一) 前言:     最近由於接手一個支付的項目,他們那邊的網絡請求和數據解析都與我平常接觸的項目不同,數據請求由於保密暫時不能說,但是數據解析用的是Protobuf,於是我就順便看了下Protobuf一些安裝、使用的一些的方法,有一些簡單的使用新的經驗總結,希望能夠幫助到大家,不多說,上正文: Protobuf是什麽:     本文簡單介紹一下Protobuf是什麽,它的優缺點,還有如何通過命令生成一個java文件,本次主要是介紹版本2.6.1,Proto2,它還有Proto3,以後的系列慢慢介紹。     Protocol Buffers是一個跨語言、跨平臺的具有可擴展機制的序列化數據工具。也就是說,我在ubuntu下用python語言序列化一個對象,並使用http協議傳輸到使用java語言的android客戶端,java使用對用的代碼工具進行反序列化,也可以得到對應的對象。聽起來好像跟json沒有多大區別。。。其實區別挺多的。     Google說protobuf是smaller,faster,simpler,我們使用google規定的proto協議定義語言,之後使用proto的工具對代碼進行“編譯”,生成對應的各個平臺的源代碼,我們可以使用這些源代碼進行工作。     比如說程序中生成了一個鏈表,但是程序退出重啟後,還要重新生成鏈表,有時候,我們很需要上次程序中該鏈表中記錄的數據。這些數據或許是經過很多大量運算生成的,每次都重新生成這些數據的話,需要消耗大量時間。這時候就可以考慮使用protobuf,將其序列化後保存在文件中,下次使用的時候,加載文件,反序列化後就可以直接使用了。     值得註意的是,protobuf是以二進制來存儲數據的。相對於JSON和XML具有以下優點:     1,簡潔     2,體積小:消息大小只需要XML的1/10 ~ 1/3     3,速度快:解析速度比XML快20 ~ 100倍     4,使用Protobuf的編譯器,可以生成更容易在編程中使用的數據訪問代碼     5,更好的兼容性,Protobuf設計的一個原則就是要能夠很好的支持向下或向上兼容 Mac環境集成Protobuf:
    1. 下載protobuf2.6.1:https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz     2. 解壓下載的文件     3. cd到protobuf-2.6.1目錄     4. $./configure     5. $make     6. $make check     7. $sudo make install (需要接著輸入密碼)     8. $which protoc     9. $protoc --version     PS:(這是集成他的以前的舊版本,最新版本已經更新到3.5.1了,後續博客會接著介紹新版本的使用) -------------------安裝完畢------------------- Protobuf 語法格式(Proto2):
    我們需要定義一個.proto格式的文件,裏面寫的才是Protobuf格式的代碼,我們先來看看Protobuf支持的數據類型:     目前Protobuf支持的數據類型和c++和java對應如下: 技術分享圖片     技術分享圖片          我們的.proto的文件示例如下:     syntax = "proto2";     package xiaomi.gamecenter.milink.msg;     option java_package = "org.xiaomi.gamecenter.milink.msg";     option java_outer_classname = "CreateOrderReq";     message OrderReq {       required string uid = 1;       optional int32 amount = 2;       optional int32 resultCode = 3;     }     OrderReq就是消息的名字,該消息有3個字段,在消息中承載的數據分別對應於每一個字段。其中每個字段都有一個修飾符,一種類型,一個名字和一個編號。     所指定的字段類型修飾符必須是如下之一:       required:一個格式良好的消息一定要含有1個這種字段。表示該值是必須要設置的;       optional:消息格式中該字段可以有0個或1個值(不超過1個),也就是可有可無;       repeated:在一個格式良好的消息中,這種字段可以重復任意多次(包括0次)。重復的值的順序會被保留。表示該值可以重復,相當於java中的List。     註意:第一行必須 (syntax = "proto2";)標識語法格式的版本,之後是包名,java_outer_classname 標識生成的java文件的名稱,並且其不能與.proto文件的名稱相同,也不能與“message OrderReq”中的“OrderReq”名稱相同,否則會報名稱錯誤; Protobuf 命令生成java文件:
    protoc --plugin=/usr/local/bin/protoc-gen-objc ./CreateOrderReq.proto --java_out="/Users/zhengjunfei/miui/oauth/sdk_oauth/Plugin/src/"     其中紅色字體表示的是.proto文件的路徑,綠色字體標明的是輸出的java格式文件的路徑。其中藍色的標識的是輸出的文件格式,cpp_out、--java_out、--python_out命令分別可以生成C++、Java、Python代碼。 完結:     後續會介紹protobuf的最新版本的使用包括在Android studio中的集成,希望大家能夠後續持續關註,並且希望能夠給大家提供到幫助,謝謝!     如要轉載,請註明出處,謝謝!      歡迎關註我的博客園博客,地址是:      https://www.cnblogs.com/zhengjunfei/      同時歡迎大家關註我的簡書博客,地址是:     https:www.jianshu.com/u/da06e00edefa 歡迎大家掃描關註我的微信公眾號,我會定期發布一些博客,分享一些知識點 技術分享圖片 技術分享圖片 本文參考資料: http://www.mamicode.com/info-detail-955103.html http://blog.csdn.net/ashimidashajia/article/details/48997627

Protobuf使用(一)