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