2012-06-16 2 views
0

클래스를 인스턴스화하고 내부 상태를 변경하며 표준 Java 직렬화 메커니즘을 사용하여 파일에 직렬화 할 수있는 데스크탑 애플리케이션 (Android가 아닌)이 있습니다. 이 파일을 별도의 Android 앱 리소스로 복사합니다. 이 파일을 Android 앱에있는 것과 같은 클래스 구조로 deserialise하고 싶습니다.데스크탑과 안드로이드 애플리케이션 간의 클래스 직렬화

그러나 Android에서 BufferedImage를 사용할 수없고 대신 Bitmap을 사용해야하므로 데스크톱과 Android 클래스간에 데이터 멤버에 약간의 차이가 있습니다.

분명히 시스템이 이렇게 좋아지지 않으므로 나에게 아무런 차이가 없기 때문에이 특정 데이터 멤버를 일시적으로 만들었습니다. 데스크톱에서 다시 직렬화 한 후에도 파일은 여전히 ​​Android에서 역 직렬화되지 않습니다.

+0

ClassNotFoundException이 MyClass 인 경우 MyClass를 앱에 추가하기 만하면됩니다. – alehro

+0

그렇게 간단하지 않습니다. 문제는 Java 직렬화가 readObject()에 의해 생성 된 객체가 MyClass 객체와 다르다고 생각하기 때문에 발생하는 것입니다. 문제가되는 데이터 멤버를 일시적으로 설정 했더라도. Externalizable이이 문제를 해결할 것이라고 생각합니다. 그냥 테스트 해봐. – Antinous

답변

0
나는 내 자신의 직렬화 기능을 작성하여 외부화를 사용하여 내 목표를 달성 할 수 있다면 누구나 알고 있나요

myclass = (MyClass)ois.readObject(); 

을 실행에의 ClassNotFoundException 오류, 또는 나는 (/ 직렬화없이 외부화를) 완전히 별도의 직렬화를 작성해야합니다

이 문제를 해결하려면 Externalizable을 구현하고 사용자 고유의 직렬화 함수를 구현해야합니다. 이를 통해 서로 다른 클래스의 동일한 데이터를 직렬화 및 비 직렬화 할 수 있습니다.

그러나 ClassNotFoundException은 열거 형의 serialization/deserialization이 잘못되어 발생한 결과입니다.

관련 문제