2014-06-17 47 views
2

我有一個使用Protofbuf-Net序列化的對象列表(假設爲class AccessLevel)。使用Protobuf-net更新特定條目

對象不是固定大小的,是否可以在不重寫整個文件的情況下更新序列化文件中的單個對象(基於索引)?

+0

啊,你願意爲此付出多少工作?答案是「是的,這是可能的」,但我認爲這很可能比很合理的情況更復雜。除了一些最初的字節外,你還可能最終重寫該文件的MOST(所以你在技術上不是整個文件)。 – TomTom

+0

嗯......有點令人失望。重寫文件的成本並不高,所以我想我會這樣做。 –

回答

2

如果更改使其更小或不影響大小:可能,但庫中沒有任何內容可以幫助您執行此操作,因爲它不是受支持的方案。對於相同長度:只需覆蓋。當然,事先知道這個長度是一個小把戲:)

在協議級別,當減小大小時:可以通過僞造一個未使用的字段或使用次最優的varint編碼現有字段來填充數據(備用字節與除了繼續位以外沒有其他)。

如果它變得更大:沒有任何詭計會使您不必重新整理整個文件。

這些都是理論上的。更實際的答案是可以證明的:不。