2014-09-18 36 views
1

我正在流中寫入位置爲pos的整數數組。我基本上有一個int[]和我使用Serializer.SerializeWithLengthPrefix(stream, array, typeof(int[]), PrefixStyle.Fixed32, -1);。這附加到具有正確前綴長度的數組流中。protobuf-net反序列化序列化數組中的第k個元素

我想反序列化流中隨機索引的元素。一種方法可能是通過pos + (index*fixedLength)尋找流,但我注意到這個數組中的整數是使用DataFormat.Default編寫的,它產生了一個變長編碼。

有沒有辦法改變它?

我可以看到這樣做的一種方式是封裝數組作爲屬性在一些包裝類。然後我可以在屬性中指定DataFormat.FixedSize。這是這種情況下的最佳做法嗎?

另外fixedLength是什麼? sizeof(int)

感謝, 尤利安

回答

0

坦率地說,如果你想要的是在一個文件固定大小的整數(或任何其他流),是絕對沒有使用Protocol Buffers的利益;忘記 - 只需將整數寫成4字節塊(小端可能是最方便的),並直接從文件(/流)訪問它們。協議緩衝區使結構化數據容易,但這並不意味着你應該使用它的每一份工作。在這種情況下,只使用原始偏移量是絕對有意義的。

+0

是的,這是肯定的如何表達的問題:)。但是,我只是試圖簡化實際問題。我會將其標記爲答案併發布另一個更詳細的問題。謝謝你,尤利安 – Iulian 2014-09-20 10:39:46

+0

@lulian讓我知道當你添加更完整的問題 – 2014-09-20 11:53:56

+0

謝謝Marc - 我發佈了這個問題[鏈接](http://stackoverflow.com/questions/25951775/protobuf-net-lazy-streaming-反序列化-的場)。 – Iulian 2014-09-20 18:04:29