2013-03-04 2 views
0

java의 게임에 UDP 소켓을 사용하여 클라이언트 서버 프로토콜을 구현하고 있습니다. 서버에서 입력을 처리하고 플레이어 및 기타 게임 개체가 포함 된 Level 개체를 업데이트하는 서버로 클라이언트의 사용자 입력을 보냅니다. 레벨 객체 (크기를 유지하는 임시 속성 포함)를 직렬화하여 클라이언트에 보냅니다. 서버로부터 수신 한 Level 객체가 일시적인 속성에 null 값을 가지므로 서버에서받은 Level 객체를 클라이언트에 병합하려고합니다. 완전하고 최신 수준의 개체를 수동으로 재구성하는 것 이외에 다른 작업을 수행하는 좋은 방법이 있습니까? 감사!원본이있는 deserialize 된 객체 병합

답변

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"}); 
+0

감사합니다. Ryan, Ill.이 시도해보십시오. – Chris