日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

protocol buffer相关

發布時間:2024/7/19 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 protocol buffer相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

protocol buffer簡介

????protocol buffer全稱Google Protocol Buffers,是google開發的一套用于數據存儲,網絡通信的協議編解碼的工具庫,與XML或者JSON相差不多,即把某種數據結構的信息,以某種格式(XML,JSON)保存起來,但是protobuf與XML和JSON不同在于,protobuf是基于二進制的。與XML和JSON的性能相別則是不言而喻的。 關于相關的性能對比可以看這里。

protocol buffer版本比較

Protobuf目前為止有兩個版本,proto2和proto3,proto3與proto2相比支持更多語言,更加簡介,去掉了一些復雜的語法與特性,,更強調約定而弱化語法。

  • 在第一行非空白非注釋行寫入syntax = "proto3";則表明此protobuf文件為proto3版本,如果不寫入,或者寫入syntax="proto2";則表示此protobuf文件為proto2版本;
  • 字段規則移除了"required",并把"optional"改名為 "singular", 在 proto2 中required是不推薦使用的,proto3則直接從語法層面上移除了required規則;
  • 移除了default選項,在proto2中,可用default選項為某一字段指定默認值,而在proto3中,字段的默認值只能根據字段類型由系統決定;
  • 移除了對擴展的支持,新增了 Any 類型;

Proto2語法格式

如下proto文件

syntax = "proto2";

package msg;

?

message CS_PlayerLogin{

????required string account=1;

????required string pwd=2;

}

message SC_PlayerLogin{

????//0成功 1賬號錯誤 2密碼錯誤

????required sint32 result=1;

????required uint64 playerId=2;

  • syntax = "proto2";對應的proto版本;
  • package msg;對應的包名;
  • message:定義消息類型;消息中的每個字段可有三個選項(required,optional,repeated)
    • required:必填字段;
    • optional:選填字段,不填就會使用默認值,默認數值類型的默認值為0,string類型為空字符串,枚舉類型為第一個枚舉值;
    • repeated:數組類型,可以放入多個類型實例。

之后再跟上數據類型,數據類型之后為字段名字,最后再跟上"=N",此處N是標志位,每個字段都有標志位,各個標志位不能重復且為正整數,其最大值為 2^29 - 1,同時protobuf內部預留了19000到19999不能被用戶使用,官方建議將常用的字段放在前面,由于這個字段的大小隨著數值大小增加,如1-16只占用一個字節(推薦消息字段個數不多余16個)。最后可以跟上自定義的默認值。

  • 在一個proto文件中可以存放多個message,message內部也可以定義message,外部如需調用需要指明對應的層級關系。同時可以使用import引入外部的proto文件:

    import "person.proto";

    //引入外部proto文件,并讓引入了該文件的proto文件也能訪問被引入類型。

    import public "person.proto";

protocol buffer基本數據類型

protocol buffer的常用基礎數據類型:

數據類型

描述

字節個數

C#語言映射

bool

布爾類型

1

bool

double

64位浮點數

N

double

float

32為浮點數

N

float

int32

32位整數

N

int

uin32

無符號32位整數

N

uint

int64

64位整數

N

long

uint64

64為無符號整

N

ulong

sint32

32位整數,處理負數效率更高

N

int

sing64

64位整數 處理負數效率更高

N

long

fixed32

32位無符號整數

4

uint

fixed64

64位無符號整數

8

ulong

sfixed32

32位整數、能以更高的效率處理負數

4

uint

sfixed64

64為整數

8

ulong

string

只能處理 ASCII字符

N

string

bytes

用于處理多字節的語言字符、如中文

N

string

enum

可以包含一個用戶自定義的枚舉類型uint32

N(uint32)

enum

message

可以包含一個用戶自定義的消息類型

N

object of class

map

鍵值對,鍵可使用string或數值類型

N

Dictionary

  • N表示打包的字節個數并不固定,取決于數據的大小;

轉載于:https://www.cnblogs.com/Yellow0-0River/p/8387729.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的protocol buffer相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。