google protocol buffer的使用和原理
- 概況:
- Protocol Buffers(也就是protobuf)是谷歌的語言中立的、平台中立的、可擴展的用於序列化結構化的數據;
- windows環境下的安裝與使用:
- protocol編譯器
- 安裝。安裝protocol編譯器,用來編譯.proto文件;
- 下載。路徑:https://github.com/google/protobuf/releases。里面有windows版的:protoc-3.6.1.win32.zip。
- 安裝。
- 下載完解壓后,如果不想安裝,可直接在cmd窗口進入解壓得到的bin目錄操作。
- 安裝,把bin目錄copy下來,放到操作系統環境變量的path變量后面。
- 使用。
- 自己編寫proto文件。例如我這里寫的文件:
message demo{ required int32 id = 1; required string name = 2; optional string email = 3; repeated string friends = 4; }
- 編譯:
- 編譯結果挺惡心的,一個只有幾行代碼的文件,編譯結果動不動就是幾千行幾萬行。。。
- 編譯命令示例:protoc --protopath D:\lshdownload\protoc-3.6.1-win32\bin --java_out ./ protoDemo.proto
- protoc,編譯命令;
- --proto_path,就是你的proto文件所在目錄是哪。我這里是D:\lsh_download\protoc-3.6.1-win32\bin。
- --java_out,標識輸出的java文件應該放在哪個目錄。這里的 ./ 是指當前目錄。
- protoDemo.proto,就是我們要編譯的文件。
- 自己編寫proto文件。例如我這里寫的文件:
- 安裝。安裝protocol編譯器,用來編譯.proto文件;
- 關於protoc命令參數,大家可以在cmd窗口輸入protoc --help 然后回車得到。
- 安裝protobuf,這里我選擇maven安裝。
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.6.0</version> </dependency>
- protobuf API的使用:
- java文件,如上.proto文件得到的.java文件,我的文件名是ProtoDemo.java.
- 調用API做什么?
- 序列化;
- 反序列化。
- 編寫序列化和反序列化代碼如下:
package demo.protobuf; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import demo.protobuf.ProtoDemo.demo.Builder; public class SerialAndDesial { public static void main(String[] args) { Builder b = ProtoDemo.demo.newBuilder(); b.setEmail("dave_peter@foxmail.com"); b.setId(1); b.setName("lsh"); ProtoDemo.demo protoDemo = b.build(); FileOutputStream output; try { //write output = new FileOutputStream("proto.ser"); protoDemo.writeTo(output); output.close(); //read ProtoDemo.demo protoDemo2 = ProtoDemo.demo.parseFrom(new FileInputStream("proto.ser")); System.out.println(protoDemo2); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
- 執行結果如下:
- protocol編譯器
- 參考資料: