【Google Protobuf】protobuf的使用(二)

一、使用

   1.1 限定修飾符

  • required: 表示是一個必須字段,發送之前沒有設置required字段或者無法識別required字段都會引發編解碼異常,導致消息被丟棄。
  • Optional:表示是一個可選字段,可選對於發送方,在發送消息時,可以有選擇性的設置或者不設置該字段的值。對於接收方,如果能夠識別可選字段就進行相應的處理,如果無法識別,則忽略該字段,消息中的其它字段正常處理。
  • Repeated:表示該字段可以包含0~N個元素。其特性和optional一樣,但是每一次可以包含多個值。可以看作是在傳遞一個數組的值。

   1.2 基本類型

  • bool: 布爾類型 1字節
  • int32: 32位有符號整數
  • uin32: 32位無符號整數
  • int64: 64位有符號整數
  • uin64:64位無符號整數
  • sint32:32位整數,處理負數效率更高
  • sint64:64位整數,處理負數效率更高
  • double: 64位浮點數
  • string: 只能處理ASCII字符
  • bytes:用於處理多字節的語言字符、如中午

    關於 fixed32 和int32的區別。fixed32的打包效率比int32的效率高,但是使用的空間一般比int32多。因此一個屬於時間效率高,一個屬於空間效率高。根據項目的實際情況,一般選擇fixed32,如果遇到對傳輸數據量要求比較苛刻的環境,可以選擇int32.

   1.3 枚舉(enum)

枚舉的定義形式和Java的Enum定義差不多,例如:

  enum PhoneType {
        MOBILE=0;
        HOME=1;
        WORK=2;
    }

   1.4 結構體(message)

message,類似於C語言中的結構體。例如:

message Login
{
	optional string username = 1;
	optional string password = 2;
}

   1.5 字段名稱

字段名稱的命名與C、C++、Java等語言的變量命名方式幾乎是相同的。
protobuf建議字段的命名採用以下劃線分割的駝峯式。例如 first_name 而不是firstName.

   1.6 字段編碼值

1900~2000編碼值爲Google protobuf 系統內部保留值,建議不要在自己的項目中使用。

   1.7 protobuf java的使用 

1創建一個新的工程Protobuf,將protoc.exe文件拷貝到當前目錄

2在protoc.exe同級目錄創建helloworld.proto文件,代碼如下

message Person {
  
  // ID(必需)
  required int32 id = 1;
  
  // 姓名(必需)
  required string name = 2;
  
  // email(可選)
  optional string email = 3;

  // 朋友(集合)
  repeated string friends = 4;
}
3使用命令:protoc.exe --java_out=./ helloworld.proto,編譯helloworld.proto文件


4編譯後在當前目錄多出來一個Helloworld.java文件


5把Helloworld.java文件和protobuf-java-2.6.1.jar引入到eclipse項目


6序列化代碼

Helloworld.Person.Builder builder = Helloworld.Person.newBuilder();
builder.setId(1);
builder.setName("小毛驢");
builder.setEmail("[email protected]");
		
Helloworld.Person person = builder.build();
byte[] result = person.toByteArray();
7反序列化代碼
	   try {
			Helloworld.Person person1 = Helloworld.Person.parseFrom(result);
			System.out.println(person1);
		} catch (InvalidProtocolBufferException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

8運行結果

控制檯:
+------------------------------------------------------------------+
id: 1
name: "\345\260\217\346\257\233\351\251\264"
email: "[email protected]"
+------------------------------------------------------------------+


作者:小毛驢,一個遊戲人 
夢想:世界和平   
原文地址:http://blog.csdn.net/liulongling
若有錯誤之處,請多多諒解並歡迎批評指正。    
本博客中未標明轉載的文章歸作者小毛驢所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

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