青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

每天早晨叫醒你的不是鬧鐘,而是夢想

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  62 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 轉載自:Protocol Buffers Language Guide之proto文件類型格式分析[關鍵點翻譯] | 漂泊如風
1、 
定義一個消息類型:

message SearchRequest {

required string query = 1;

optional int32 page_number = 2;

optional int32 result_per_page = 3;

}

A.特定域的類型:兩個整型變量page_number和result_per_page、一個string類型的變量query。也可以定義為其他類型如:枚舉和其它message類型。

B. 指派一個標簽:這個標簽是唯一的,它的范圍可以使1~229-1,當然19000~19999是不可以使用的,因為protocol buffer內部使用。其中1~15保留為經常使用的消息元素。

C. 指定字段規則:指定的消息字段的規則有以下幾種:a.required 一個結構良好的message必須有一個這樣的字段。b.optional 結構良好的message有零個或者一個這樣的字段。c.repeated 這個字段可以重復任意多次(包括零次)。說明:在repeated后面加上[packed = true]可以取得更高效的編碼。如:repeated int32 samples = 4 [package=true];

D.可以在一個文件中添加多個message,在編譯生成cpp代碼后,將對應多個類。

E. Proto注釋的添加和cpp一樣,用雙斜杠即可。

F. 運行protocol buffer 編譯器按照指定的選項生成特定語言的代碼,在生成的代碼中包含了對proto文件中聲明的變量的設定、取得、序列化消息到輸出流和從輸入流中分解出你的消息的操作。詳細可以參考對應語言的protocol buffer API。

2、 標量值類型

標量消息字段有表中以下幾種(對應項為自動生成的類中的類型):

.proto Type Notes C++ Type Java Type
double double double
float float float
int32 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. int32 int
int64 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. int64 long
uint32 Uses variable-length encoding. uint32 int[1]
uint64 使用變長編碼 uint64 long[1]
sint32 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. int32 int
sint64 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. int64 long
fixed32 Always four bytes. More efficient than uint32 if values are often greater than 228. uint32 int[1]
fixed64 Always eight bytes. More efficient than uint64 if values are often greater than 256. uint64 long[1]
sfixed32 Always four bytes. int32 int
sfixed64 Always eight bytes. int64 long
bool bool boolean
string A string must always contain UTF-8 encoded or 7-bit ASCII text. string String
bytes May contain any arbitrary sequence of bytes. string ByteString

3、 Optional字段的默認值

設定方法如:optional int32 result_per_page = 3 [default = 10];

如果沒有指定則:string默認值為空串,bool為false,數字類型的為零,枚舉類型的默認值為枚舉定義列表中的第一個值。

4、 枚舉

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3 [default = 10];
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
    IMAGES = 2;
    LOCAL = 3;
    NEWS = 4;
    PRODUCTS = 5;
    VIDEO = 6;
  }
  optional Corpus corpus = 4 [default = UNIVERSAL];
}

外部message可以通過MessageType.EnumType取得其中的值

5、 使用其他的message類型

message也可以作為一個類型進行使用,例如:

message SearchResponse {

repeated Result result = 1;

}

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

當然一個message可以在不同的文件中進行定義,使用的時候可以使用import進行加入:import “myproject/other_protos.proto”;

6、 嵌套類型

message SearchResponse {

message Result {

required string url = 1;

optional string title = 2;

repeated string snippets = 3;

}

repeated Result result = 1;

}

上面例子中,result在SearchResponse中進行定義,如果希望在外部的message中調用result,你可以使用:Parent.Type:

message SomeOtherMessage {

optional SearchResponse.Result result = 1;

}

當然了也可以嵌套一個消息任意深度:

message Outer {                  // Level 0
  message MiddleAA {  // Level 1
    message Inner {   // Level 2
      required int64 ival = 1;
      optional bool  booly = 2;
    }
  }
  message MiddleBB = {  // Level 1
    message Inner = {   // Level 2
      required int32 ival = 1;
      optional bool  booly = 2;
    }
  }
}

分組:在創建一個新的message類型時,這種特點一般不被贊成使用,往往用嵌套的message類型代替。

message SearchResponse {

repeated group Result = 1 {

required string url = 2;

optional string title = 3;

repeated string snippets = 4;

}

}

只是用了大括號進行括起來,注意標點!這個和上面的那個例子是一致的。

7、 更新一個消息類型

一個已經存在的message類型不再滿足你的需要,在不改變以前定義的格式的基礎上進行更新。遵照如下規則:

A、 不要改變已經存在字段的數字標簽。

B、 任何你添加的新字段應該是optional或者repeated類型。

C、 非必須字段可以被刪除,同時標簽數字在你更新的message類型中不再被使用。(更好的方法是為字段更名,可以加上OBSOLETE_前綴,這樣將來使用你的proto文件的用戶就不能意外的使用這個數字了)

D、一個非必須的字段可以轉變為一個擴展,反過來也一樣,同時類型和數字保持不變。

E、 int32、uint32、int64、uint64和bool都是兼容的。

F、 sint32和sint64是兼容的,但是并不與其他整型數兼容。

G、string和bytes相互兼容。

H、 嵌入message和bytes兼容

I、 fixed32和sfixed32,fixed64和sfixed64兼容

8、 擴展

舉例:

message Foo {
  // ...
  extensions 100 to 199;
}

字段數字[100, 199]保留用以擴展,其他用戶可以再Foo中使用這些標記數字添加新的字段,如下:

extend Foo {

optional int32 bar = 126;

}

這樣就在Foo中添加了類型為int32的新字段bar,在編譯生成的文件中訪問擴展字段的方法稍有不同:

Foo foo;

foo.SetExtension(bar, 15);

其他的處理方法有HasExtension(),ClearExtension(),GetExtension(),MutableExtension(), andAddExtension().

說明:擴展字段可以是任何字段類型,包括message類型。

擴展的嵌套:

message Baz {

extend Foo {

optional int32 bar = 126;

}

}

C++訪問擴展的方法:

Foo foo;

foo.SetExtension(Baz::bar, 15);

唯一不同的就是在bar前面加了個Baz,就這么簡單。

提倡不是用嵌套的擴展。

擴展標簽數字的選擇:

message Foo {

extensions 1000 to max;

}

max= 229 – 1, 或者 536,870,911.但是不包含19000~19999,具體原因參照上文。

9、 

舉例:

package foo.bar;

message Open { … }

在另外一個message中使用這個包的方法:

message Foo {

required foo.bar.Open open = 1;

}

生成的C++代碼中package被聲明為命名空間。Open將在命名空間foo::bar中。

10、 服務的定義

舉例如下:

service SearchService {

rpc Search (SearchRequest) returns (SearchResponse);

}

11、 選項

。。。

12、 產生你的類

下載源碼,配置并編譯源碼生成編譯器。編譯參數:

protoc –proto_path=IMPORT_PATH –cpp_out=DST_DIR –java_out=DST_DIR –python_out=DST_DIR path/to/file.proto

說明:

a. LMPORT_PATH是指定你的.proto文件坐在的目錄。

b. 提供以下輸出:

–cpp_out在DST_DIR產生C++代碼

–java_out在DST_DIR產生Java代碼

–python_out在DST_DIR產生python代碼

c. 必須提供一個或者多個.proto文件作為輸入。當然多個.proto文件可以同時被指定編譯。

posted on 2011-04-05 18:29 沛沛 閱讀(689) 評論(0)  編輯 收藏 引用 所屬分類: 開源庫
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品美女自拍福到在线| 久久精品国产99| 国产精品久久久久久久久| 欧美午夜精品久久久久久孕妇| 久久香蕉精品| 另类人畜视频在线| 美女精品视频一区| 欧美成人dvd在线视频| 美女诱惑黄网站一区| 欧美大香线蕉线伊人久久国产精品| 久久野战av| 欧美区一区二区三区| 国产精品日韩一区二区| 国产亚洲aⅴaaaaaa毛片| 国产日韩欧美综合| **网站欧美大片在线观看| 91久久精品一区二区别| 一区二区三区久久网| 亚洲欧美日本另类| 美女视频黄 久久| av成人天堂| 久久九九全国免费精品观看| 欧美电影免费观看网站| 国产精品免费观看在线| 亚洲丶国产丶欧美一区二区三区 | 一区二区免费在线视频| 欧美一区二区视频在线| 欧美激情精品久久久久久蜜臀| 国产精品区一区| 亚洲老板91色精品久久| 亚洲欧美日韩一区在线| 欧美国产日产韩国视频| 亚洲综合电影| 欧美乱妇高清无乱码| 狠狠色综合播放一区二区| 亚洲视频播放| 亚洲成色精品| 久久午夜精品| 欧美三级黄美女| 136国产福利精品导航网址| 亚洲视频日本| 欧美激情综合色| 久久国产精品一区二区| 国产精品久久久久久亚洲毛片 | 欧美色欧美亚洲高清在线视频| 国产一区观看| 亚洲综合色在线| 亚洲国产精品一区二区尤物区| 久久成人精品视频| 国产亚洲福利社区一区| 午夜精品久久久久久久99黑人| 亚洲日韩成人| 欧美日韩精品二区| 一区二区电影免费在线观看| 亚洲大胆美女视频| 欧美高清视频免费观看| 亚洲国产日韩在线一区模特| 欧美ed2k| 欧美jizzhd精品欧美喷水 | 一区精品久久| 久热精品视频在线观看| 欧美一区二区女人| 国产亚洲一区在线| 久久成人精品视频| 午夜精品久久久久久久| 国产欧美日韩三区| 久久久久久尹人网香蕉| 久久久久久久久久久久久9999| 好看的日韩视频| 欧美成人在线影院| 欧美成人有码| 亚洲一区日韩在线| 亚洲综合大片69999| 国产一区二区三区观看| 开心色5月久久精品| 看片网站欧美日韩| av成人激情| 亚洲小说欧美另类社区| 国产揄拍国内精品对白 | 午夜国产不卡在线观看视频| 国产视频一区在线观看一区免费| 久久久91精品国产一区二区三区 | 欧美午夜一区二区| 亚洲欧美国产制服动漫| 欧美影院成人| 亚洲乱亚洲高清| 亚洲一区二区三区视频| 韩日视频一区| 99国产精品久久久久久久久久| 国产精品网曝门| 欧美sm极限捆绑bd| 欧美日韩中文精品| 久久精品日产第一区二区| 亚洲高清资源| av成人免费在线观看| 国产专区精品视频| 亚洲精品一区二区三区福利| 国产视频丨精品|在线观看| 欧美激情视频网站| 国产精品一区视频| 欧美福利电影网| 国产目拍亚洲精品99久久精品| 久久这里只有精品视频首页| 欧美激情综合网| 另类激情亚洲| 国产精品自拍一区| 亚洲国产欧美一区二区三区久久 | 亚洲国产欧美在线| 国产农村妇女精品一二区| 亚洲国产另类精品专区| 国产日本欧美一区二区三区在线 | 午夜国产精品影院在线观看| 亚洲精品国产精品乱码不99按摩 | 一本色道久久综合亚洲精品小说| 午夜久久tv| 亚洲综合另类| 欧美人与性动交a欧美精品| 麻豆精品一区二区av白丝在线| 欧美亚男人的天堂| 亚洲精品久久久一区二区三区| 在线成人黄色| 久久国产一二区| 久久久99精品免费观看不卡| 国产精品久久久久av| 91久久久在线| 亚洲东热激情| 久久久五月天| 免费看av成人| 亚洲第一精品福利| 久久精彩免费视频| 美女视频黄 久久| 在线精品视频免费观看| 久久不射2019中文字幕| 久久九九99视频| 韩国成人精品a∨在线观看| 久久成人免费网| 久久先锋影音| 在线观看精品一区| 免费观看不卡av| 亚洲高清视频一区| 亚洲精品欧美极品| 欧美国产日产韩国视频| 亚洲精品影视| 亚洲午夜免费福利视频| 欧美午夜宅男影院在线观看| 一本色道久久88亚洲综合88| 亚洲一区二区三区三| 国产精品久久久久高潮| 午夜精品久久久99热福利| 久久久久久久久综合| 黄色国产精品一区二区三区| 一区二区欧美亚洲| 亚洲精品视频免费| 亚洲视频免费观看| 国产精品高潮呻吟| 午夜欧美精品| 免费成人av资源网| 亚洲黄色高清| 国产精品初高中精品久久| 亚洲综合首页| 老牛国产精品一区的观看方式| 1024国产精品| 欧美日韩三区四区| 欧美一级在线播放| 欧美激情日韩| 欧美一区二区三区免费大片| 狠狠操狠狠色综合网| 欧美电影免费观看高清完整版| 一区二区三区www| 久久一区亚洲| 亚洲天堂av综合网| 国内偷自视频区视频综合| 你懂的成人av| 亚洲欧美一区在线| 亚洲第一页中文字幕| 亚洲女同同性videoxma| 伊人久久综合| 国产精品久在线观看| 久久免费一区| 亚洲女人小视频在线观看| 亚洲第一福利在线观看| 欧美专区亚洲专区| 99在线精品免费视频九九视| 国产一区999| 国产精品igao视频网网址不卡日韩| 久久久国产成人精品| 一区二区黄色| 亚洲国产天堂久久综合网| 欧美一区二区三区免费在线看| 91久久精品国产91久久| 国产午夜精品视频| 国产精品xxx在线观看www| 欧美成人国产| 久久三级福利| 久久er99精品| 亚洲欧美日韩专区| 国产精品99久久久久久久久| 亚洲国产影院| 欧美激情中文字幕在线| 蜜臀av国产精品久久久久|