본문 바로가기



프로그래밍/JAVA

[JAVA] java.io.InvalidClassException (serialVersion UID)

직렬화 된 객체를 역직렬화 할때 클래스 내용이 변경되면 역직렬화가 실패하기 때문에 (한개 이상의 필드를 더 선언하게 될경우), 일반적으로 serialVer.exe를 사용하여 UID를 생성하여 

publci class someOfclassName implemtns Serializable { 
static final long serialVersionUID = ????????????????????????L;
}
...
}

 위와 같은 코드를 작성하게 되는데 실행시에 Exception in thread "main" java.io.InvalidClassException: 패키지명.클래스명; local class incompatible 에러가 발생하는 경우가 있다.  

java.io.InvalidClassException


이 경우는 다른 패키지파일에 동일한 UID가 있을경우이다. 따라서 현재 작성중인 파일의 UID를  다른 패키지 파일에 사용하지 않도록 하고, 같은 UID를  사용했던 파일은 별도로 생성기를 사용해서 UID를 적용해주도록 하자.

당연히 다른패키지에서 생성한 파일과 이름이 같으면 이쪽 패키지에서 읽어올 수 없다. 

다만, 다른 패키지에서 생성한파일도 시리얼을 넣으면 읽어올 수 있는 방법이 존재할것 같다는 생각은 들지만 나중에 따로찾아볼 생각이다.