packed repeated與repeated的區別在於編碼方式不一樣,repeated將多個屬性類型與值分開存儲。而packed repeated採用Length-delimited方式。
proto3的repeated默認就是使用packed這種方式來存儲,(proto2與proto3區別在於.proto的語法)。
http://blog.csdn.net/zhaozheng7758/article/details/6749000:
[packed =false / true]->採用更緊湊的編碼方式
Package: 命名空間
[deprecated =false/true]->標識該域是否已經被棄用 如:
optional int32 old_field = 6[deprecated=true]; 該域已棄用
repeated字段,可以包含0~N個相同的內容,所以一般這樣用,加個bool表明它到底是0個沒數據還是大於0個:
message MSG1
{
repeated fixed32 data = 1;
optional bool include_data = 2
}
當 include_data = true 時,表示要修改data字段,此時如果data字段包含0個元素則是清空。
如果include_data = false ,時表示對data字段不做任何改變,此時data字段包含0個元素或者多個元素在業務邏輯上都應該被忽略。