歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

protobuf進行序列化

Protocol Buffers 是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串行化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平台無關、可擴展的序列化結構數據格式。

一、開發前的准備

下載protoful :https://github.com/google/protobuf/releases,下載需要的版本

二、創建.proto文件

option java_package = "io.netty.example.codec"

option java_outer_classname = "PersonProtobuf"

message Person {

  required string name = 1;

  required int32 id =2;

  option 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 CountryInfo {

    required string name = 1;

    required string code = 2;

    optional int32 number = 3;

    }

}

三、使用protoc.exe生成java類

解壓該下載的protoc-2.6.0-win32.zip,得到protoc.exe,把文件msg.proto拷貝到當前目錄執行

protoc.exe --java_out=./ msg.proto

在目錄下就會產生java類

四、protobuf的語法

proto文件中的數據類型可以分為兩大類:復合數據類型和標准數據類型,復合數據類型包括枚舉和message類型;標准數據類型包含:整形、浮點、字符串等,後面會詳細介紹。

•message

最常用的數據格式就是message,例如CountryInfo 可以用message表示:

message CountryInfo {

  required string name = 1;

  required string code = 2;

  optional int32 number = 3;

}

Java生成後會是這樣的類

•required

必須賦值,不能為空,否則該條message會被認為是“uninitialized”。build一個“uninitialized” message會拋出一個RuntimeException異常,解析一條“uninitialized” message會拋出一條IOException異常。除此之外,“required”字段跟“optional”字段並無差別。

•optional

字段可以賦值,也可以不賦值。假如沒有賦值的話,會被賦上默認值。

•repeated

該字段可以重復任意次數,包括0次。重復數據的順序將會保存在protocol buffer中,將這個字段想象成一個可以自動設置size的數組就可以了

•Enum

enum PhoneType{

    MOBILE = 0;

    HOME = 1;

    WORK =2;

}

Copyright © Linux教程網 All Rights Reserved