我正在使用UDP套接字为java中的游戏实现客户端服务器协议。我将用户输入从客户端发送到服务器,服务器处理输入并更新包含玩家和其他游戏对象的Level对象。我正在序列化Level对象(它还包含瞬态属性以保持大小不变)并将其发送到客户端。我想将从服务器接收的Level对象与客户端上的对象合并,因为从服务器接收的对象将具有其瞬态属性的空值。除了手动重建完整且最新的关卡对象之外,有没有其他方法可以做到这一点?谢谢!
答案 0 :(得分:1)
假设您的对象是具有getter和setter属性的“标准”java bean,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"});