2014-01-12 3 views
-2

이것은 자바 직렬화에 대한 일반적인 질문입니다.자바 직렬화, serialVersionUID 및 클래스 버전

내가이 개 문자열 필드 일부 클래스 Person.java이 - 이름이 lastName :

public class Person implements Serializable { 

    private static final long serialVersionUID = -460531025539746041L; 

    private String name; 
    private String lastName; 

    public String getName() { 
    return name; 
    } 

    public String getLastName() { 
    return lastName; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public void setLastName(String lastName) { 
    this.lastName = lastName; 
    } 

} 

좀 시리얼 라이저를 사용하여이 클래스를 직렬화하고있어을의이 this one을 가정 해 봅시다. 직렬화 된 데이터를 네트워크를 통해 다른 서버로 보내고 있습니다. 그런 다음 동일한 직렬기를 사용하여 대상 서버에서 역 직렬화됩니다.

이제 Person 클래스가 변경되었다고 가정합니다 (새 필드가 추가됨). 데이터를 완전히 전달하려면 내 목표 (버전 별 또는 다른 측면)에서 모든 수정이 필요합니까?

+0

예, 다른 사람이 세부 정보를 설명해야합니다. JSON과 같은 것을 사용하는 것이 종종 바이너리 플랫폼 전용 프로토콜보다 나은 옵션 인 이유는 이것이 많은 이유 중 하나라는 점에 유의할 것입니다. – chrylis

+0

달성하고자하는 것은 무엇입니까? 수신자가 클래스의 이전 버전을 가지고 있음에도 불구하고 보내는 내용을 deserialize 할 수 있습니까? 수신 측에서도 클래스가 업데이트 되었습니까? 테스트 할 때 어떻게됩니까? –

+0

@JBNizet 수신기는 업데이트 된 데이터를 수신 할 수 있어야합니다. 이를 위해 클래스의 각 변경 사항에 대한 버전을 변경해야합니까? 그리고 또 뭐? – forhas

답변

1

이제 Person 클래스가 변경되었다고 가정합니다 (새 필드가 추가됨). 데이터가 완전히 전달되도록하기 위해 내 목표 (버전 별 또는 다른 측면)로부터의 적응이 필요합니까?

아니요 필드를 추가하는 것은 다른 몇 가지 가능한 변경 사항과 마찬가지로 심각하지 않습니다. Versioning of Serialized Objects chapter of the Object Serialization Specification을 참조하십시오. serialVersionUID도 변경하지 마십시오.

이 주제에 관한 많은 잘못된 정보와 많은 오해가 있으며이 중 일부는 바로이 스레드에 나타납니다. 명세에 동의하지 않는 것을 믿지 마십시오.

관련 문제