2014-05-16 7 views
0

현재 ClientRepository 클래스가있는 프로젝트를 작성하고 있습니다. 이 클래스는 serialVersionUID를 지정하지 않습니다.serialVersionUID 예외

Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = -3576242897222506440 

그래서 나는 기본의 serialVersionUID (1L)을 추가했지만 지금은 내가 "스트림 classdesc을 변경할 수있는 방법

Exception in thread "main" java.io.InvalidClassException: ClientRepository; local class incompatible: stream classdesc serialVersionUID = -477189107700903771, local class serialVersionUID = 1 

를 얻을 : 내 프로그램을 실행하려고하면, 나는 예외 다음있어 serialVersionUID "를 1L로 설정하면 충돌하지 않습니다.

감사합니다.

답변

3

데이터를 변경하지 마십시오 - 당신은 당신의 클래스는 여전히 이전 버전과 호환 (단 하나의 버전은 야생에서 데이터를 가지고있는 경우), 변화 특정라면, 대신 serialVersionUID에서 -477189107700903771L로 데이터의 값과 일치한다고 선언했습니다. 값은 임의적입니다. 데이터의 내용과 일치해야합니다.

물론 클래스가 호환되지 않는 방식으로 변경되면 맞춤 직렬화 코드를 작성해야합니다.

개인적으로 나는 이러한 취성의 이유로 정확하게 이진 직렬 직렬화를 피하려고합니다. Protocol Buffers과 같은 대안을 볼 수도 있습니다.

1

serialVersionUID = 1L을 추가하기 전에 리포지토리에 일련 번호가 지정된 개체가 문제 일 수 있습니다. 이들은 여전히 ​​1L과 다른 serialVersionUID를 생성했습니다. 저장소를 제거해야합니다.

관련 문제