2015-06-24 62 views
1

我正在使用Protobuf for python。Protobuf不會序列化默認值

我一直在嘗試使用默認值,但每次我運行SerializeToString()我什麼也得不到。

例如,

這裏是我的.proto文件對象

message Test{ 

    optional string lol = 1 [default="HI"]; 
    optional int32 num = 2 [default=200]; 
} 

我跑

test = packets_pb2.Test() 
print(test.num) 
print(test.SerializeToString()) 

,並得到 200打印(test.num) ,但沒有結果(空)的SerializeToString()

我想我defau lt值被序列化。

任何想法如何做到這一點?

在此先感謝。

回答

1

這是工作的打算。默認值不會在電線上發送。相反,接收端假定如果一個字段不存在,那麼它應該使用默認值。這通過不發送通用值來節省線路上的空間。這確實意味着客戶端和服務器必須同意默認值;您通常不應更改您的.proto文件中的默認值。

記住默認值的主要目的是爲了能夠處理來自現場存在之前已建成的老客戶端的消息。所以,那些客戶顯然不能在網上發送默認值,因爲他們對此一無所知。