2013-07-20 6 views
0

나는 게임을 코딩하고있다. 일련 번호가 저장 및 멀티 플레이어에 유용하다는 것을 알고 있습니다. 멀티 플레이어가 클라이언트에 의해 선택되었을 때 업데이트를 강제로하면 serialversionuid를 사용할 어떤 이유도 보이지 않습니다.게임의 직렬화에 대한 조언

절약을 위해 ID가 저장된 게임 플레이 데이터를 새로운 업데이트 버전으로 변환하는 능력에 영향을 줍니까? 또는이 모든 논리는 게임의 버전에 대한 간단한 참조로 이드를두고 있습니다.

미리 감사드립니다. 내 담당자가 더 높은 경우 upvote 것입니다 : P

편집 : 두 대답은 매우 도움이됐다. 그 (것)들에게서, 나는 연속열과 게임 프로그래밍에 관하여 이것을 모 읍니다. 게임에서 서로 다른 버전의 서로 다른 버전의 버전이 버전간에 호환성 또는 비 호환성을 갖기 위해 버전에 대한 참조가 필요하기 때문에 s-uid를 갖는 것이 유용 할 것입니다. 하나의 "게임 버전 ID"는 정보가 충분하지 않습니다. 깔끔하게 해줘서 고마워!

답변

1

예, serialVersionUid은 데이터가 출력 된 Serializable 클래스의 버전을 정확하게 식별하는 해시 또는 버전을위한 것입니다.

불행히도 주로 직렬화를 방해하는 모든 사소한 변화를 유발하여 직렬화에 대한 장애물로 작용합니다. 다른 버전을 사용하면 예외가 발생합니다.

불필요한 비 호환성을 피하기 위해 java 소스에 serialVersionUid 상수를 생성하거나 할당하는 것이 좋습니다. Javadoc의에서 :

다른 자바 컴파일러 구현에 걸쳐 일관성 serialVersionUID의 값을 보장하기 위해, 직렬화 클래스는 명시 적으로 serialVersionUID의 값을 선언해야합니다.

Java 소스를 파헤 치면 구현/재정의 할 수있는 방법을 찾을 수 있습니다.이 방법을 사용하면 직렬화를보다 잘 제어 할 수 있습니다.

참조 :

  • java.io.ObjectInputStream의
  • java.io.ObjectOutputStream의
  • java.io.Externalizable의
1

무슨 일 당신이없는 경우이다 serialVersionUID 1은 클래스 구조에 따라 계산됩니다. 실제로는 클래스를 다소 변경하면 (즉, 인스턴스 변수를 추가하지 않는 것, 즉 직렬화/직렬화에 대해 중요하지 않다고 생각되는 것을 포함 할 수 있음), 직렬화 된 직렬화를 직렬화 해제했기 때문에 직렬화가 실패합니다 객체는 이제 수화하는 클래스에 대해 계산 된 인 serialVersionUID를 반환합니다.

간단한 대답은 단지 하나를 선언하는 것입니다. 그렇게하면, java는 선언 된 것을 사용하고 직렬화는 변경에 민감하지 않게됩니다. 인스턴스 변수를 추가/제거함으로써 여전히 문제를 해결할 수 있지만 더 강력 할 것임에 유의하십시오. 또한 그것이 무엇인지는 중요하지 않습니다. 직렬 변환 도구에서 생성 된 long과 일치 할 필요가 없습니다. 클래스에 변경 사항을 적용한 경우 변경하는 한 1 또는 다른 모든 long을 사용하는 것이 안전합니다. .

(편집자 - 유용한 사람이 this reference on how the serialVersionUID is calculatedhere)