Protocol buffers 快速入門(針對 Java 語言)

寫在前面

在學習使用 protocol buffers 的時候一開始在網上找一些博客看,遇到的問題是很多博客寫的並不清晰看了也是讓人一頭霧水,沒法達到對 protocol buffers 快速上手使用的目的(完成一個 hello world)。然後通過官方文檔學習後對 protocol buffers 有了大概的認識,也達到能夠應用的程度。建議最好還是去看官網上的文檔,描述的很詳細。protocol buffers 官網(請科學上網)。

Protocol Buffers 是什麼?

Protocol Buffers 簡稱 protobuf , 由 google 開源。是一中語言中立 , 平臺中立 ,(不和特定的語言、操作系統綁定),對結構化數據進行序列化、反序列化的機制。類似於 XML , 比起 XML protobuf 的優點是 :數據佔用空間小 , 傳輸速度快 ,使用起來簡單 , 定義一次數據結構,生成指定語言的代碼 (目前支持Java 、Python 、C++ 、Objective-C 、Go 、Ruby 、C# 、JavaScript 、PHP 、Dart )。 缺點是可讀性不如 XML 。protobuf 不是好的面向對象的設計 , 不能發揮面向對象的特性 , 不應該通過繼承向生成的類添加行為, 這會打破內部機制,無論如何都不是很好的面向對象的實踐。

開始使用 brotobuf

1. 下載並安裝 protobuf compiler (用 C++ 編寫),作用是根據定義的 .proto 文件生成指定語言的代碼。

這一步有兩種方式 :

1. 使用源碼自己去編譯、安裝 (對使用 C++ 的同學來說很簡單)。

2. 下載已經編譯好的可以直接執行的二進制文件 (對使用非 C++ 的同學來說很方便 ,下載後最好配置到環境變量中)。

2. 根據所使用的語言下載 protobuf 對應的運行時包 , 比如我使用的是 java 語言 , 那麼我需要將 protobuf-java (maven 中可以找到) 這個包添加到我的工程內。

第 1 步是和開發環境有關 , 使用 protobuf compiler 生成代碼 ,將生成的代碼放在自己的應用中。

第 2 步是和運行時有關 , 要在自己的應用中添加 protobuf 對應語言的包。

3. 編寫 .proto 文件 ,在 .proto 文件中定義數據結構 , .proto 有定義好的語法規則 。 (我使用的 IDE 是 IDEA , 在 IDEA 中安裝了 Protobuf Support 插件 , 可以提供一些諸如語法檢查的幫助)。

4. 根據指定的 .proto 文件生成代碼 , 這裡我生成的是 Java 代碼 , 例子 :

cat.proto 文件內容

<code>syntax = "proto2";

package tutorial;

option java_package = "net.j4love.protobuf.demo";
option java_outer_classname = "CatProto";

message Cat {
required int32 id = 1;
required string name = 2;
required string color = 3;
}/<code>

protoPath : .proto 文件所在路徑;

codeDestPath : 生成的 java 代碼目標路徑

protoFilePath : 具體的某個 .proto 文件所在路徑

protobuf compiler 命令生成代碼 : protoc -I=$protoPath --java_out=$codeDestPath $protoFilePath (protoFilePath 可以同時指定多個,之間用空格隔開)

例子 :

<code>protoc -I=E:/Develop/hepeng/protobuf-demo/src/main/java/net/j4love/protobuf/proto --java_out=E:/Develop/hepeng/protobuf-demo/src/main/java E:/Develop/hepeng/protobuf-demo/src/main/java/net/j4love/protobuf/proto/cat.proto/<code>

使用 Java 代碼的生成方式例子 :

<code>
// protobufCompilerPath 是安裝的 protobuf compiler 中 protoc.exe 的絕對路徑
// 例如 :D:/DevelopmentTools/protobuf compiler/bin/protoc.exe
public static void generateJavaCode(String protobufCompilerPath , String protoPath ,
String codeDestPath , String ... protoFilePaths) {
String protobufCmd = protobufCompilerPath + " -I=" + protoPath + " --java_out=" + codeDestPath + " ";
for (String protoFilePath : protoFilePaths) {
protobufCmd += " " + protoFilePath;
}
System.out.println("protobuf Generate Code Command : " + protobufCmd);
try {
Runtime.getRuntime().exec(protobufCmd);
} catch (IOException e) {

e.printStackTrace();
}
}/<code>

經過這 4 步就可以完成一個 protobuf 的 hello world 了 , 其他詳細內容還是建議看官方的文檔。

Protocol buffers 快速入門(針對 Java 語言)

碼地址。


分享到:


相關文章: