Google Protocol Buffer安裝編譯及使用

最近玩了玩谷歌的Protocol Buffer,下面就簡單介紹下

Google Protocol Buffer( 簡稱 Protobuf) 是 Google 公司內部的混合語言數據標準,目前已經正在使用的有超過 48,162 種報文格式定義和超過12,183 .proto 文件,他們用於RPC 系統和持續數據存儲系統。Protocol Buffers 是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串行化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平臺無關、可擴展的序列化結構數據格式。目前提供了 C++JavaPython 三種語言的 API相比較一些其他的XML技術而言,該技術的一個明顯特點就是更加節省空間(以二進制流存儲)、速度更快以及更加靈活。

安裝 Google Protocol Buffer

在網站 http://code.google.com/p/protobuf/downloads/list上可以下載Protobuf 的源代碼。然後解壓編譯安裝便可以使用它了。


解壓完成後首先要對源碼進行編譯再此以win7爲例,因爲編譯需要用到visual studio所以沒有安裝的需要先安裝vs,我電腦上裝的是vs2010,裝好vs後打開vsprojects文件夾


點擊紅框內的文件打開,這時候就打開了vs程序,應該會提示進行項目轉換

將編譯模式切換爲Release模式,並右鍵分別生成libprotobuflibprotobuf-litelibprotocprotoc這四個工程,編譯完成後在Release文件夾下會生成這四個文件libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.exe 


將它們拷貝到cwindows目錄下

接下來就可以用protoc了,使用如下命令

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR path/to/file.proto
以下是各種語言的不同寫法

例如

protobuf-master\java>protoc -I=D:\Cell\proto --java_out=D:\Cell\proto\Cell D:\Cell\proto\test.proto

如果不出意外在目標路徑下就會生成相應的版本的文件了,文件有了接下來就是如何用,下面以java爲例

別的語言不太清楚,java在使用的時候問題會比較多,當你把生成的java文件拷貝到編輯器裏邊時會發現報錯,這是因爲缺少jar包,jar包從何而來呢?進入proto源碼下的java文件夾有個README.md用記事本打開它


跟着它一步一步來吧,首先安裝maven,就是下載完了配置下環境變量,然後分別運行1,2,3命令吧,第三步要注意

就是說你要確保protobuf-master\src目錄下有proto.exe,理論上你自己編譯完成了就有了,然而並沒有,好吧,還記得編譯完成後我們生成的那幾個文件有這個吧,把它再拷貝一份過來,然後再來運行這幾個命令,順利完成。到此爲止你的protobuf-master\java\target這個路徑下就會多了一些文件了,把jar包拷貝到編譯器吧,然後就可以開始使用了。

在此給出官網上一個例子,這是一個.proto文件

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}

使用的時候就可以這樣用了

<strong><span style="color:#330033;">Person john =
         Person.newBuilder()
                    .setId(1234)
                    .setName("John Doe")
                    .setEmail("[email protected]")
                    .addPhone(
                            Person.PhoneNumber.newBuilder()
                                    .setNumber("555-4321")
                                    .setType(Person.PhoneType.HOME))
                    .build();
    Log.d("test",john.toString()+"");</span></strong><span style="color:#ffffff;">
</span>






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章