클라이언트 - 서버 설정에서 서버가 보낸 객체의 클래스 정의를 수정하여 클라이언트 측에서 충돌이 예상됩니다 (클라이언트 Jar가 이러한 변경 사항을 반영하도록 업데이트되지 않았습니다).호환되지 않는 객체 버전간에 Java de/serialization이 성공하는 이유는 무엇입니까?
그러나 충돌하지 않습니다.
참고 : 클라이언트에서 개체를 사용하는 방식은 충돌을 피할 수 있습니다. 클라이언트는 deserialize 된 Object를 절대 캐스팅하지 않으며 제거 된 필드를 사용하지 않습니다. 객체는 파이썬 스크립트에서 Jython을 통해서만 사용됩니다. 객체의 필드를 사용할 때 후기 바인딩 메커니즘 (reflection?)을 사용하기 때문에 가능합니다. 이것은 또한 직렬화에 클래스의 서명 (true)이 포함되어 있다고 가정합니다 (ObjectOutputStream의 문서에서 언급 됨).
메모 : serialVersionUid는 절대로 변경하지 않습니다.
내 추론이 맞는 것처럼 보입니까?
제 경우에는 여분의 필드 (제공하지 않는 스트림에서)가있는 클래스로 deserialize하고 있습니다. 내 serialVersionUID가 동일합니다. 명세에 따르면 이것은 예외적 인 변경이되어야하지만 예외는 발생하지 않습니다. – haelix