1.什麼是protobuff協議?
Protobuf(Google Protocol Buffers)是google開發的的一套用於數據存儲,網絡通訊時用於協議編解碼的工具庫.它和XML和Json數據差很少,把數據已某種形式保存起來.Protobuf相對與XML和Json的不一樣之處,它是一種二進制的數據格式,具備更高的傳輸,打包和解包效率.
2.protobuf在java方面的應用。
1):下載安裝。https://download.csdn.net/download/antgan/9593735
2):配置環境變量。
3)設計對象
。。。。
4)描述對象
package tutorial;
option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";
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;
}
4.編譯描述
cmd>protoc --java_out . xxx.proto
5.導入源代碼到項目中
6.使用對象java
3、 Eclipse新建項目
我使用maven構建protobuf項目,方便引入protobuf-java-2.5.0.jar依賴。
在項目根目錄建立proto文件夾,存放proto文件。
這裏寫圖片描述
maven依賴pom.xml網絡
4、編寫.proto文件
在proto文件夾下編寫person-entity.proto,以下(proto協議的規則點這查看)工具
option java_outer_classname = "PersonEntity";//生成的數據訪問類的類名
message Person {
required int32 id = 1;//同上
required string name = 2;//必須字段,在後面的使用中必須爲該段設置值
optional string email = 3;//可選字段,在後面的使用中能夠自由決定是否爲該字段設置值
}測試
4、使用protoc.exe編譯成java類
有兩種方法:ui
直接打開cmd運行命令也行。google
使用Java Rumtime執行cmd命令
util包下新建GenerareClass類
這裏寫圖片描述.net
/**設計
命令格式以下。code
protoc.exe -I=proto的輸入目錄 --java_out=java類輸出目錄 proto的輸入目錄包括包括proto文件
1
生成的PersonEntity.java類
這裏寫圖片描述
5、測試
編寫Test類,模擬序列化和反序列化過程。
public class Test {
public static void main(String[] args) throws IOException {
//模擬將對象轉成byte[],方便傳輸
PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
builder.setId(1);
builder.setName("ant");
builder.setEmail("ghb@soecode.com");
PersonEntity.Person person = builder.build();
System.out.println("before :"+ person.toString());
System.out.println("===========Person Byte=========="); for(byte b : person.toByteArray()){ System.out.print(b); } System.out.println(); System.out.println(person.toByteString()); System.out.println("================================"); //模擬接收Byte[],反序列化成Person類 byte[] byteArray =person.toByteArray(); Person p2 = Person.parseFrom(byteArray); System.out.println("after :" +p2.toString()); }
}
輸出以下 這裏寫圖片描述