2013-03-04 67 views
0

我正在使用UDP套接字爲java中的遊戲實現客戶端服務器協議。我將用戶輸入從客戶端發送到服務器,在那裏服務器處理輸入並更新包含玩家和其他遊戲對象的Level對象。我正在序列化Level對象(它也包含瞬態屬性來保持大小)並將其發送給客戶端。我想將從服務器接收到的Level對象與客戶端上的Level對象合併,因爲從服務器接收到的對象的瞬態屬性將具有空值。除了手動重建完整的最新級別對象之外,是否有一種好方法可以完成此操作?謝謝!將反序列化的對象與其原始合併

回答

1

假設你的對象是「標準的」java bean,它們的屬性有getter和setter,Spring在其BeanUtils class中有幾個實用方法可以提供幫助。這兩種方法都被命名爲copyProperties,它們都用於將屬性從一個對象複製到另一個對象。 One of the methods可讓您指定屬性的白名單,the other可讓您指定黑名單。通過這些方法,你可以定義一個接口或者,要麼應該或不應該被複制到從服務器接收到的級別,然後讓複製爲你做過的屬性列表 - 像這樣:

interface LevelPropertiesToMerge { 
    void setPropertyOne(String something); 
    void setPropertyTwo(int somethingElse); 
} 

// serialization code on client 
Level fromServer = ...; 
Level fromClient = ...; 
BeanUtils.copyProperties(fromClient, fromServer, LevelPropertiesToMerge.class); 

或:

// serialization code on client 
Level fromServer = ...; 
Level fromClient = ...; 
BeanUtils.copyProperties(fromClient, fromServer, 
    new String[] {"propertyOneToIgnore", "propertyTwoToIgnore"}); 
+0

謝謝瑞安,我試試這個。 – Chris 2013-03-04 04:09:05

相關問題