2009-04-01 3 views
13

serialVersionUID를 지정하지 않고 컴파일 된 여러 직렬화 가능 클래스가 있습니다. 이제는 이러한 클래스에 일부 데이터 멤버를 추가해야하지만 이미 일부 직렬화 된 객체를 유지하려고합니다.직렬화 된 Java 객체의 serialVersionUID는 어떻게 찾을 수 있습니까?

소스 코드에서 동일한 ID를 지정할 수 있도록 이러한 직렬화 된 객체의 serialVersionUID를 확인해야합니까?

답변

13

코드를 아직 수정하지 않은 경우에는 serialver 도구 (JDK의 일부)를 실행하고 생성 된 내용을 확인할 수 있습니다. 나는 그것이 계산 된 seriVersionUID이 무엇인지 알게 될 것입니다.

Here is a brief article on serialver.

+2

원래 코드를 컴파일 할 때 사용한 JVM과 완전히 동일한 지 확인하십시오! – Eddie

+1

그렇지 않으면 클래스 파일과 직렬화 된 객체가 다른 JVM에서 이식 할 수 없으므로 다른 JVM에서도 작동해야합니다. – Thilo

+4

자바 객체 직렬화 규격, 4.6 절에서는 합성 멤버에 대해 다른 이름을 생성하는 구현 때문에 serialVersionUID가 내부 클래스의 경우 JVM간에 어떻게 호환되지 않을 수 있는지 설명합니다. 두 개의 Sun JVM을 사용해도 이러한 상황이 실제로 발생하는 것을 보았습니다. – Martin

3

이클립스를 사용하는 경우, 그것은 계산의 serialVersionUID를 생성하는 "빠른 수정"을 가지고있다. 물론 이것은 객체가 직렬화되었을 때의 클래스에 대한 정확한 소스가있는 경우에만 작동합니다.

최소한 클래스 파일이있는 경우 JDK와 함께 제공되는 "serialver"명령 줄 도구를 사용하십시오.

6

내가 일반적으로하는 일은 코드를 컴파일하고 실행 해보고 제기 된 예외에 문제가있는 SVUID가 나와 있기 때문에 코드를 잘라내어 내 코드에 붙여 넣을 수 있습니다. 조잡하지만 작동합니다.

관련 문제