2014-04-10 4 views
1

는 다음과 같은 구조 (간체)가 있다고 가정인터페이스 구현 및 Java 직렬화

class Impl3 implements Inter, Serializable 
{ 
    private static final long serialVersionUID = ...; 
    //... 
} 

을 ... 그리고 세 개의 클래스와 끝까지 MyClass.interInstance가 가정 할 수 있습니다.

이미 직렬화 된 MyClass 개체에 영향을 주어야합니까?

사용자가 (Android 앱) 위와 같은 변경 사항을 모방 한 업데이트 후에 일부 직렬화 된 객체를 열 수 없다는 불만을 제기했기 때문에이를 묻습니다 (예 : 인터페이스의 새로운 직렬화 가능 구현을 추가 한 경우).).

답변

1

이미 인 MyClass 개체에 영향을 주어야합니까?

개체가 Impl1 또는 Impl2로 serialize되어 있고 Impl3로 deserialize하려고 시도하는 경우 -이 작업은 수행되지 않습니다. 그래서 결론은 객체를 Impl1로 serialize 할 때 Impl1로 deserialised해야한다는 것입니다.

덧붙여서, 안드로이드에서는 - 공식적으로 지원되고 또한 권장되는 방법으로 모든 종류의 객체를 "직렬화"하는 방법은 Parcelable 인터페이스의 사용법입니다. 그리고 why to use it.

+0

내 말은 MyClass (interInstance)에 Impl1 또는 Impl2 (둘 다 직렬화 가능)가 될 수있는 필드를 가질 수 있다는 것입니다. 나중에 세 번째 구현 (Impl3)을 추가하면 MyClass 인스턴스의 interInstance가 Impl1, Impl2 또는 Impl3이 될 수 있습니다. 문제는 Impl3 이전에 생성 된 파일에서 직렬화 된 객체를 읽는 동안이 추가가 영향을 미칠 수 있는지 여부입니다. – user1987392

+0

@ user1987392 그것은 영향에 의한 의미에 달려 있습니다. 직렬화 된 객체는 변경되지 않지만 어떻게 작성 했는가? Impl2로 객체를 직렬화하는 경우 Impl2로도 역 직렬화해야하며 Impl3으로는 역 직렬화해야합니다. – Sajmon

+0

임팩트에 의해, ObjectInputStream는 직렬화 된 오브젝트가 Impl1 또는 Impl2를 interInstance로서 가지는 파일을 (구) 계속 읽어 낼 수 있습니다. – user1987392