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

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

  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>
            免费永久网站黄欧美| 亚洲黄色在线看| 久久亚洲精品伦理| 久久九九热免费视频| 久久中文精品| 亚洲精品国产日韩| 亚洲国产精品久久久久秋霞影院 | 亚洲一区二区在线观看视频| 亚洲精品乱码久久久久久| 亚洲欧洲偷拍精品| 日韩视频在线免费| 亚洲女人天堂av| 久久久久久色| 欧美日韩高清不卡| 国产伦一区二区三区色一情| 国产女同一区二区| 亚洲国产精品小视频| 一本到高清视频免费精品| 亚洲欧美日韩在线不卡| 久久久青草婷婷精品综合日韩| 欧美电影在线播放| 中文一区在线| 久久久久久久久久久一区| 欧美激情按摩| 国产日韩欧美一区二区三区在线观看| 黄色日韩网站视频| 亚洲丝袜av一区| 久久久91精品国产| 亚洲日本一区二区三区| 亚洲视频一区二区在线观看 | 亚洲大胆视频| 亚洲图中文字幕| 每日更新成人在线视频| 日韩视频一区二区三区在线播放免费观看 | 久久精品30| 欧美美女喷水视频| 永久久久久久| 小嫩嫩精品导航| 亚洲黄色大片| 麻豆精品视频在线观看| 国产私拍一区| 亚洲综合精品| 亚洲狼人精品一区二区三区| 久久精品国产在热久久| 国产精品成人一区| 日韩一级在线| 欧美 日韩 国产在线| 亚洲欧美一区二区在线观看| 欧美日韩国产综合视频在线| 在线欧美福利| 久久久中精品2020中文| 亚洲一区欧美一区| 欧美日韩国产成人在线91| 亚洲国产片色| 国产精品久久久久久久久免费 | 国产噜噜噜噜噜久久久久久久久| 亚洲国产视频a| 亚洲精品小视频| 一区二区三区精品视频| 欧美成人有码| 久久先锋资源| 精品动漫一区| 久久久精品日韩欧美| 亚洲综合另类| 国产日韩欧美视频| 久久久www成人免费精品| 国产精品99久久久久久久女警| 欧美国产日韩一区| 亚洲美女电影在线| 亚洲欧洲一区二区在线播放| 欧美国产亚洲精品久久久8v| 日韩一级黄色大片| 99精品视频免费观看视频| 国产精品黄页免费高清在线观看| 亚洲欧美日韩综合| 欧美一区二区三区视频免费播放| 美女免费视频一区| 国产综合亚洲精品一区二| 亚洲色图在线视频| 一本色道久久综合狠狠躁篇的优点 | 欧美激情一区二区三区在线视频| 91久久亚洲| 日韩视频一区二区在线观看 | 久久先锋资源| 狠狠色狠狠色综合人人| 久久精品亚洲| 亚洲人成人77777线观看| 欧美激情一区二区| 亚洲另类一区二区| 亚洲精选一区二区| 欧美日韩成人一区二区| 亚洲免费观看高清在线观看 | 欧美巨乳波霸| 亚洲免费视频中文字幕| 午夜影院日韩| 一区二区三区久久网| 亚洲国产精品久久久久秋霞不卡| 欧美jizzhd精品欧美喷水| 亚洲精品乱码久久久久久久久 | 国产日韩一区二区三区在线播放| 西瓜成人精品人成网站| 久久aⅴ国产欧美74aaa| 亚洲国产色一区| 一本色道久久加勒比精品| 国产视频在线观看一区| 狠狠久久亚洲欧美专区| 99re这里只有精品6| 国产欧美精品久久| 久久天堂国产精品| 欧美激情自拍| 久久久亚洲影院你懂的| 欧美日韩大片一区二区三区| 亚洲美女色禁图| 欧美在线视频全部完| 亚洲激情黄色| 亚洲一区二区三区免费观看 | 国产精品天天看| 欧美国产综合视频| 国产精品入口夜色视频大尺度| 麻豆91精品| 免费看的黄色欧美网站| 久久久久久久综合| 欧美午夜精品一区| 免费高清在线一区| 国产精品夜夜夜一区二区三区尤| 欧美国产另类| 国产精品视频观看| 亚洲精品激情| 亚洲国产高清aⅴ视频| 午夜在线a亚洲v天堂网2018| 亚洲美女在线看| 一区二区三区视频在线| 亚洲——在线| 欧美日本不卡高清| 欧美大片免费观看| 国产一区二区三区在线播放免费观看| 亚洲欧洲日本一区二区三区| 狠狠网亚洲精品| 欧美在线视频免费| 亚洲一区亚洲| 欧美日韩成人在线观看| 亚洲国产视频直播| 亚洲黄色在线| 久久亚洲国产成人| 亚洲精品一区二区三区蜜桃久 | 久久一区欧美| 国产一区二区黄| 亚洲免费在线播放| 午夜精品久久久| 欧美肉体xxxx裸体137大胆| 亚洲国产另类精品专区| 亚洲欧洲日韩在线| 巨乳诱惑日韩免费av| 欧美激情片在线观看| 亚洲午夜在线观看| 欧美激情国产日韩精品一区18| 久久精品一区二区三区中文字幕| 欧美三级欧美一级| 一本色道精品久久一区二区三区 | 依依成人综合视频| 欧美一区二区三区视频在线观看| 午夜亚洲性色福利视频| 国产精品久久久久久久久动漫| 久久亚洲综合| 亚洲桃花岛网站| 欧美日韩中文字幕日韩欧美| 日韩午夜免费| 欧美综合国产精品久久丁香| 国产精品v日韩精品| 亚洲免费中文字幕| 亚洲欧美清纯在线制服| 国产香蕉久久精品综合网| 久久国产精品一区二区三区| 欧美福利影院| 亚洲小说欧美另类社区| 欧美高清在线一区| 久久精品99| 亚洲精品男同| 欧美影院久久久| 亚洲精品久久嫩草网站秘色| 国产精品国产成人国产三级| 欧美亚洲视频| 亚洲国产网站| 欧美一区中文字幕| 亚洲国产成人精品视频| 欧美人妖另类| 免费观看亚洲视频大全| 亚洲丝袜av一区| 欧美成人高清| 亚洲欧美激情一区二区| 欧美亚洲成人免费| 欧美激情一区二区三区在线视频 | 久久精品99久久香蕉国产色戒| 好男人免费精品视频| 欧美激情综合色综合啪啪| 久久成人人人人精品欧| 99精品热视频只有精品10| 母乳一区在线观看| 欧美在线网址| 亚洲天堂黄色|