2013-10-30 92 views
0

我正在解析UDP流的一些輸入。該協議有點像二進制查詢字符串。它會發送一個代碼字節,告訴你如何讀取以下字節。例如,代碼值1可能意味着接下來的4個字節是一個旨在作爲ID的int,值2可能意味着接下來的4個字節是一個意味着是Velocity的int,值3可能意味着一個float對於緯度,值4可能意味着下一個字節是一個長度爲int的字符串。是否有像這樣解析二進制數據的設計模式?

是否有用這些規則解析事物的設計模式?我確信必須有一些方法比代碼值上的大開關更好。我在C#中使用BinaryReader,但我想有一種語言不可知的解決方案。

+0

您可以沿着工廠使用命令或策略模式,但這取決於您想如何真正使用這些模式。你在switch語句後做了什麼? –

回答

0

您可能需要策略模式。每個策略實例將知道如何分析它的數據的類型和多少字節消耗和某種回調或生成器對象的將要處理的是讀

interface for ReadStrategy{ 

    Read(Stream stream, MyObject obj); 

} 


class VelocityReader{ 

    Read(Stream stream, MyObject obj){ 
     //read 4 bytes as int. 
     int value = stream.ReadInt32(); 
     myObj.setVelocity(value); 
    } 

} 

您還需要一個工廠類的相關數據讀取每條記錄的第一個字節以知道要使用哪種策略(可以實現爲交換機),或者如果要使用更多模式,請在策略中添加一種方法以瞭解如何識別其自己的代碼值並使用Chain of Responsibility輪詢每個策略類型以找到可以處理代碼值的第一個策略類型。

+0

責任鏈。我忘了那個。我會研究它。 –

相關問題