2010-03-18 53 views
1

我仍然不確定我的問題的標題是否正確,最可能不是。然而,我花了一些時間搜索網絡和計算器,我無法找到我面臨的問題的一個很好的描述。有條件的反序列​​化

基本上我想要實現的是讀取一些原始字節的能力,並根據其中一些字節的值以不同方式解釋其餘字節。這就是TLV的工作原理,您可以檢查標籤並根據它來解釋結果。當然,我始終可以在C++代碼中保留該邏輯,但是我正在尋找一種可以將邏輯從源代碼中移出的解決方案(可能是某種xml描述)。這將允許我更容易地描述不同的編碼(協議)。我熟悉Protocol Buffers和其他一些序列化庫,但是它們都解決了不同的問題。他們假設他們在溝通的兩端,而我想描述溝通(有點)。

這樣的解決方案是否可用,如果否 - 爲什麼不?我是否會遇到一些固有的困難,我會努力實現它。

回答

1

我知道沒有這樣的事情。

至於爲什麼沒有任何東西可能歸結爲沒有人真的需要它。通信協議不太可能以任何重要的方式發生變化,爲什麼要支付對不會發生變化的反應能力呢?

3

我相信這是一件容易的事,很多工作,但很容易。

兩個重要的概念:1)工廠和2)對象控制反序列化。工廠將根據ID或標籤創建一個對象實例。一旦對象被創建,對象就負責從數據流(或緩衝區)加載它的成員。

更簡單的設計可能是實現嵌套工廠。工廠根據ID調用子工廠。這可能會繼續下去,直到調用最終的靜態創建方法來創建適當的對象實例。

最終對象將被傳遞給流(或緩衝區),它將加載其數據成員。讓對象加載其成員(而不是外部對象或函數)的原因是該對象知道其成員的類型和佈局。此外,一切的位置,以便添加或刪除數據成員時,只有對象更改,而不是其他外部函數(訪問對象數據成員)。

希望這會有所幫助。