这个开销是很简单,它需要知道其中每个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