1 回答

TA貢獻1817條經驗 獲得超14個贊
您缺少的是Encoder
實例生成的字節(jié)流除了每個狀態(tài)之外還具有全局Encoder
(程序范圍)狀態(tài)。該全局狀態(tài)由 [注意:此處編輯的短語] 注冊和發(fā)送類型組成。
當您發(fā)送一個類型化的值時,如果該類型在發(fā)送之前尚未注冊,它將在全局狀態(tài)下為您注冊。這會為該類型分配一個內部數(shù)值。見Register
(及其同伴RegisterName
)。當您調用您的時,它會注冊保存在 中X
的匿名結構類型。當您調用您的時,它會注冊保存在 中的匿名結構類型。它們得到不同的內部類型編號。通過不調用,該類型永遠不會被注冊,并且' 的類型會在第一個可用號碼下注冊。s
X
Y
s
Y
X
Y
在我的代碼中,我正在對字節(jié)緩沖區(qū)進行散列...
這不是一個好主意,因為現(xiàn)在可能很明顯的原因。 但是,如果您以已知的順序顯式注冊每種類型,那么您在這里就足夠安全了,除非將來的某個版本出于某些(可能是好的)原因更改了線路格式。 糟糕,對此進行測試表明它也無濟于事。這是因為即使該類型已注冊,它也沒有設置傳輸編號,直到第一次對該類型的值進行編碼。因此,您需要對每種類型的值進行編碼(并且可以選擇丟棄)。
這是一個仔細丟棄編碼這兩種類型的有效示例,以便注釋掉調用對log.Println(a.X())
第二個值的編碼沒有影響。
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報