Java數據通訊中使用Googgle Protobuf 序列化與反序列化

1.什麼是protocol buffer

ProtocolBuffer是用於結構化數據串行化的靈活、高效、自動的方法,有如XML,不過它更小、更快、也更簡單。你可以定義自己的數據結構,然後使用代碼生成器生成的代碼來讀寫這個數據結構。你甚至可以在無需重新部署程序的情況下更新數據結構。

 

1. google官方連接地址  http://code.google.com/p/protobuf/downloads/list

 

2. 選擇proto.exe壓縮包protoc-2.4-win32.zip和protobuf-java-2.4.1.jar壓縮包protobuf-2.4.zip

 

3.下載一個protobuf-java-2.4.1.jar文件(注意,要與你剛纔下的proto.exe版本相同,否則可能出現編譯通不過現象)

 

4.在proto.exe同級目錄,編寫一個netbean.proto文件,爲需要序列化的數據接口加入一個message屬性,爲每一個字段指定名稱和類型,如下所示(message 的名稱不能與java_outer_classname 名稱相同,不然編譯不過 ):

package com.leehongee.netserver.net.bean;

 

option java_package = "com.leehongee.netserver.net.bean";

option java_outer_classname = "Request";

 

message request_Net {

 required string cmd = 1;

 optional int32 keycode = 2;      

 optional sint32 posX = 3;

 optional sint32 posY = 4;

 optional bool onOrOff = 5;

 optional bool ontouch = 6;

}

 

備註:限定修飾符 required ,optional ,repeated

required: 表示是一個必須字段,必須相對於發送方,在發送消息之前必須設置該字段的值,對於接收方,必須能夠識別該字段的意思。

optional:表示是一個可選字段,可選對於發送方,在發送消息時,可以有選擇性的設置或者不設置該字段的值。

repeated:表示該字段可以包含0~N個元素。其特性和optional一樣,但是每一次可以包含多個值。

 

5.使用CMD命令編譯這個netbean.proto文件:

D:\protoc-2.4.1-win32>protoc.exe  --java_out=./  netbean.proto

 

6.在目錄com\leehongee\netserver\net\bean 目錄下將生成一個Request.java源文件,並將其引入到Myeclipse中

 

7.把jar包protobuf-java-2.4.1.jar也引入到工程libs目錄中

 

8.使用方法調用序列化:

 

Request .request_Net .Builder builder=Request .request_Net ..newBuilder();

builder.setCmd("ontouch");

Request .request_Net  request=builder.builder();

byte[] buffer=request.toByteAarray();

 

9.使用反序列化:

try{

    Request .request_Net  request     = Request .request_Net .parseFrom(buffer);

   }

   catch(Exception ex){

       System.out.println(ex.getMessage());

   }


from: http://www.cnblogs.com/leehongee/p/3323784.html

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