protocol buffer 是 google 的一種數(shù)據(jù)交換的格式,它獨立于語言,獨立于平臺。google
提供了三種語言的實現(xiàn):java、c++ 和 python,每一種實現(xiàn)都包含了相應(yīng)語言的編譯器以及庫文件。由于它是一種二進(jìn)制的格式,比使用
xml 進(jìn)行數(shù)據(jù)交換快許多??梢园阉糜诜植际綉?yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。本文通過一個簡單的示例介紹 protocol
buffer。
在開始之前需要下載 protocol buffer 的編譯器和相應(yīng)類庫。下載地址為:http://code.google.com/p/protobuf/downloads/list
。當(dāng)前版本為 2.1.0,下載一下兩個壓縮包:protoc-2.1.0-win32.zip 和 protobuf-2.1.0.zip,前者是
protocol buffer 編譯器,后者包含了三種語言的開發(fā)包。
首先解壓 protoc-2.1.0-win32.zip,把 protoc.exe 文件放到 path 路徑中,最簡單的就是把這個文件復(fù)制到
c:\windows 目錄中。
解
壓 protobuf-2.1.0.zip 文件,假設(shè)解壓后的目錄為 proto_home。由于此開發(fā)包中只包含了源文件,沒有包含打包后的
jar 文件,所以需要自己手動編譯。下面一步一步來編譯 protocol buffer 的 java 實現(xiàn),由于 protocol
buffer 使用 maven 作為編譯工具,所以必須先下載安裝 maven,maven 可以從
http://maven. 上下載。安裝 maven 非常簡單,只要解壓并把 bin 目錄添加到 path 中即可。安裝好
maven 后,測試一下 maven 是否安裝成功,打開命令行窗口,運行命令 mvn -version,當(dāng)看到一下輸出后,說明 maven
安裝成功。
在
編譯之前還需把 protocol buffer 的編譯器復(fù)制一份到把 protocol buffer 的編譯器復(fù)制一份到目錄
proto_home\src\ 中,由于在 maven
腳本中調(diào)用了這個文件。下面在命令行窗口中把當(dāng)前工作目錄定位到proto_home\java 中,運行命令 mvn
package。編譯完成后會在 taget 目錄中生成一個 jar 文件 protobuf-java-2.1.0.jar。
protocol
buffer 的編譯器和基于 java 的類庫已經(jīng)準(zhǔn)備好了,下面可以使用 protocol buffer 寫一個簡單的示例。本文中就直接使用
protocol buffer 本身自帶的一些示例,這個示例在 proto_home\examples 目錄中。這個示例會用到這個目錄中的
addressbook.proto、AddPerson.java 和 ListPerson.java 文件。下面一步一步來運行這些示例。
首先把前面編譯生成的 protobuf-java-2.1.0.jar 復(fù)制到 proto_home\examples 目錄中,便于引用。
使
用 protocol buffer 編譯器編譯 addressbook.proto 文件。打開命令行窗口,并定位到
proto_home\examples 目錄中,運行命令 protoc --java_out=.
addressbook.proto,執(zhí)行這個命令后會在當(dāng)前目錄下生成一個java類
com.example.tutorial.AddressBookProtos.java。
生成了 java
類之后就是編譯并運行這個示例,在命令行中執(zhí)行命令 javac -d . -classpath
.;protobuf-java-2.1.0.jar AddPerson.java ListPeople.java
com\example\tutorial\AddressBookProtos.java。
下面運行 AddPerson,在命令中執(zhí)行命令 java -cp .;protobuf-java-2.1.0.jar AddPerson
addr.dat,按照提示輸入相應(yīng)的信息,如下圖所示
運行這個程序會在當(dāng)前目錄中創(chuàng)建一個數(shù)據(jù)文件 addr.dat 保存 protocol buffer 生成的數(shù)據(jù)。運行程序 ListPeople
則可以讀取 addr.dat 文件中的數(shù)據(jù)。如下圖所示