這個開銷是很簡單,它需要知道其中每個20個對象的開始和結束的信息。在不破壞格式的情況下,我可以做任何不同的事情(即做與規範相反的事情)。
如果你真的想血淋淋的細節:
數組或列表(如果我們排除「包裝」,它在這裏不適用),只需子消息的重複塊。有兩種佈局可用於子消息;字符串和組。用字符串,佈局:
[header][length][data]
其中header
是(在這種情況下與場1十六進制08)的導線型和場數的varint編碼醪,length
是varint編碼大小data
,數據是子對象本身。對於小對象(data
小於128字節),這通常意味着每個對象有2個字節的開銷,具體取決於:字段號(15以上的字段佔用更多空間),以及b:數據的大小。
隨着一組,佈局:
[header][data][footer]
其中header
是線型和場數(在這種情況下,與場1十六進制0B)的varint編碼醪,data
是子對象,並且footer
是另一個varint mash,用於指示對象的結尾(在此例中爲字段1的十六進制0C)。
團體普遍不太受歡迎,但他們的優勢是他們不會招致任何開銷,因爲data
的規模增長。對於小的字段號(小於16),開銷是每個對象2字節。當然,你需要支付大型現場數字的兩倍。
和Foo本身是免費的嗎?它應該佔用一些空間嗎? – user492238 2011-03-06 17:07:56
它應該佔用一些空間,但22個字節是一個很大的空間! – Martin 2011-03-06 17:16:30
在1340之上的22個字節不是'那麼多',當然不是用於序列化。繼續你的生活吧。 – 2011-03-06 18:32:34