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

概念java

1.什麼是protocol buffer數據結構

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

 

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

 

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

 

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

 

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

package com.leehongee.netserver.net.bean;code

 

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

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());

   }

相關文章
相關標籤/搜索