W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本文對比了Protobuf和Interface這2種IDL的差異,幫助Dubbo協(xié)議開發(fā)者了解Protobuf,為后續(xù)轉(zhuǎn)到Triple協(xié)議和Grpc協(xié)議做鋪墊。
ptoto類型 | java類型 |
---|---|
double | double |
float | float |
int32 | int |
int64 | long |
uint32 | int[注] |
uint64 | long[注] |
sint32 | int |
sint64 | long |
fixed32 | int[注] |
fixed64 | long[注] |
sfixed32 | int |
sfixed64 | long |
bool | boolean |
string | String |
bytes | ByteString |
[注]在Java中,無符號的32位和64位整數(shù)使用它們的有符號對數(shù)來表示,頂部位只存儲在符號位中。
enum TrafficLightColor { TRAFFIC_LIGHT_COLOR_INVALID = 0; TRAFFIC_LIGHT_COLOR_UNSET = 1; TRAFFIC_LIGHT_COLOR_GREEN = 2; TRAFFIC_LIGHT_COLOR_YELLOW = 3; TRAFFIC_LIGHT_COLOR_RED = 4; }
枚舉是常量,因此采用大寫
message VipIDToRidReq { repeated uint32 vipID = 1; }
底層實際上是1個ArrayList
PB不支持無序、不重復(fù)的集合,只能 借用數(shù)組實現(xiàn),需要 自行去重。
message BatchOnlineRes { map<uint32, uint32> onlineMap = 1;//在線狀態(tài) }
message BatchAnchorInfoRes { map<uint32, AnchorInfo> list = 1; //用戶信息map列表 } /* * 對應(yīng)接口的功能: 批量或單個獲取用戶信息 */ message AnchorInfo { uint32 ownerUid = 1 [json_name="uid"]; //用戶id string nickName = 2 [json_name="nn"]; //用戶昵稱 string smallAvatar = 3 [json_name="savt"]; //用戶頭像全路徑-小 string middleAvatar = 4 [json_name="mavt"]; //用戶頭像全路徑-中 string bigAvatar = 5 [json_name="bavt"]; //用戶頭像全路徑-大 string avatar = 6 [json_name="avt"]; //用戶頭像 }
Feature | Java Interface | Protobuf | 備注 |
---|---|---|---|
方法重載 | √ | × | |
泛型/模板化 | √ | × | |
方法繼承 | √ | × | |
嵌套定義 | √ | 部分支持 | PB僅支持message和enum嵌套 |
import文件 | √ | √ | |
字段為null | √ | × | |
多個入?yún)?/td> | √ | × | PB僅支持單入?yún)?/td> |
0個入?yún)?/td> | √ | × | PB必須有入?yún)?/td> |
0個出參 | √ | × | PB必須有出參 |
入?yún)?出參為抽象類 | √ | × | PB的入?yún)?出參必須為具象類 |
入?yún)?出參為接口 | √ | × | PB的入?yún)?出參必須為具象類 |
入?yún)?出參為基礎(chǔ)類型 | √ | × | PB的入?yún)?出參必須為結(jié)構(gòu)體 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: