2012-05-22 5 views
1

가능한 중복 :
Why should I bother about serialVersionUID?Java Serializable : serialVersionUID의 중요성?

내가 직렬화를 구현하는 클래스를 사용하고 있습니다. Eclipse는 나에게 "No Serial UID"경고를 주지만, 클래스 작성 및 읽기는 정상적으로 작동합니다. UID를 갖는 Serializable 클래스의 목적이 무엇인지 궁금 해서요? 좋은 연습일까요, 아니면 수업이 끝나면 수업이 제대로 작동하지 않을까요? 어떤 숫자라도 될 수 있습니까?

+2

http://stackoverflow.com/questions/285793/why-should-i-other-about-serialversionuid – alegen

답변

5

다른 VM 또는 다른 컴퓨터를 사용하여 동일한 클래스를 직렬화 및 비 직렬화 할 때 중요합니다. UID는 직렬화를 시도하는 클래스가 실제로 생각한 클래스인지 확인하는 데 사용됩니다. 따라서 코드의 클래스가 하나의 UID를 가지며 직렬화 된 클래스가 다른 클래스 인 경우 de - 직렬화가 실패합니다.

UID가없는 클래스는 JVM에 의해 자동으로 주어 지지만 다른 JVM이 동일한 클래스에 동일한 UID를 부여한다는 보장은 없습니다.

Read the javadoc of the Serializable interface for more details.

그것은 임의의 숫자를 할 수 있습니까? 당신이 (transient 일 비) 직렬화 필드에 영향을 미칠 클래스를 변경할 경우

이상적으로는, UID는 변경해야 (해시 같은) 클래스의 특정 버전에 고유 한 일부 수 있어야한다. Eclipse에서 자동으로 UID를 생성 할 수 있다고 생각합니다.

+1

대부분의 내용에 동의합니다. 고유성에 관해서는 클래스간에 고유해야 할 필요는 없으며 클래스가 호환되지 않는 방식으로 변경되면 변경해야합니다. jvm에 의해 생성 된 기본 버전이 해시 인 이유는 클래스 수준 변경에 민감하기 때문입니다. – jtahlborn

+0

@jtahlborn 동일한 UID를 가진 두 개의 다른 클래스가 있고 다른 클래스를 역 직렬화하려고하면 문제가 발생합니까? – trutheality

+0

클래스의 이름이 직렬 데이터의 일부이기 때문에 표준 자바 직렬화로는이를 수행 할 수 없습니다. – jtahlborn