(1)定義package 屬性的時候桑逝,同時也要定義java_package屬性
雖然說不定義java_package屬性也行棘劣,因為不定義java_package屬性默認(rèn)會根據(jù)package定義的屬性放置包,但是一般不建議這么做楞遏,因為在protobuf中茬暇,package定義的是在protobuf跨語言級別的命名空間,也就是說它可以避免與非java語言命名的沖突寡喝。
(2)分配的標(biāo)號糙俗,一般使用1~15來標(biāo)號常用或者重復(fù)的元素,用16以上的標(biāo)號不常用元素预鬓。1~15的標(biāo)號占一個字節(jié)巧骚,16以上的標(biāo)號占更多字節(jié)(具體如下圖)。重復(fù)的字段需要重新分配標(biāo)號格二,所以重復(fù)字段是這種優(yōu)化的候選者劈彪。
(3)buider和message(詳細(xì)的后面會說),提供一些公有方法:
toString:提供一種更友好的展現(xiàn)消息內(nèi)容
mergeFrom(builder提供):可以和合并其他消息蟋定,singular標(biāo)注的簡單類型字段會覆蓋粉臊,復(fù)合類型會被合并,repeated字段會連接起來驶兜。
強制性:
1.必須在第一行定義protobuf的版本扼仲,如:syntax="proto3"
2.使用java_outer_classname定義的類名必須不能跟message所聲明的名字一樣(不一樣不會報錯,但是不生成代碼)
3.分配的標(biāo)號不能重復(fù)抄淑,刪除字段的標(biāo)號不要重新使用
一般遵循一下原則:
(1)不改變現(xiàn)有字段的tag分配
(2)添加新字段從未使用的tag中屠凶,不包括那些刪除的tag
4.刪除字段的方式
(1)刪除字段
(2)使用reserved關(guān)鍵字回收字段標(biāo)號
eg:reserved 2,15? 或者? reserved "字段名1","字段名2"
5.對于枚舉值有幾個地方要說明的
(1)不要在輕易砸枚舉值中聲明allow_alias=true肆资,一般用作兼容舊代碼
枚舉allow_alias
這種在同一個枚舉值使用allow_alias=true為兩個不同名枚舉值聲明相同標(biāo)號矗愧,一般是兼用前端老代碼的。
(2)不能在相同命名空間中,兩個不同的枚舉類型聲明相同名字的枚舉唉韭。
同一命名空間下夜涕,不同枚舉類型使用相同名字標(biāo)識