2014-12-02 2 views
0

나는 커다란 Java 프로젝트 (시뮬레이션 프로그램)를 진행 중이지만 다른 컴퓨터에서 다른 버전으로 병렬 실행됩니다.다른 Java 버전으로 저장된 객체를 역 직렬화하는 방법은 무엇입니까?

런타임시 현재 시뮬레이션 상태를 객체 스트림으로 저장하여 나중에 다른 컴퓨터에 저장할 수 있습니다. 이는 매우 중요한 기능입니다. 프로그램의 현재 사용 가능한 버전이 이전에 스트림을 직렬화 한 이전 버전과 호환되지 않을 수 있으므로 전체 프로그램을 저장된 스트림과 함께 JAR 파일에 저장하여 프로그램 버전으로 깨끗하게 역 직렬화 할 수 있습니다. 그것을 창조했다.

그러나 Java 버전 자체가 함계 (분명히) 인 것은 동일한 Java 버전이 스트림을 직렬화하는 데 사용 된 직렬화 해제 시스템에서 실행되어야 함을 의미합니다. 상황을 더욱 악화시키기 위해 Java 8의 다른 업데이트도 서로 호환되지 않는 것처럼 보입니다. (필자는 모든 컴퓨터에 최신 업데이트가 설치되어 있기 때문에이 특정 상황을 더 이상 재현 할 수는 없지만). 프로그램이 실행되는 모든 컴퓨터에서 모든 Java 버전을 제어 할 수 없기 때문에 이것은 심각한 문제입니다.

나는 직렬화에별로 좋지 않으므로 아마도 (잘만하면)이 상황을 처리하는 좋은 방법이있다.

+0

클래스에'serialVersionUID'를 지정 했습니까? – Kayaman

+0

예. 하지만 문제를 해결하기 위해 어떻게 사용할 수 있습니까? –

+0

서로 다른 Java 8 업데이트가 충돌을 일으키는 경우 (클래스가이를 자주 변경하지 않음) 어떤 항목을 직렬화하는지 알 수 없습니다. 그것은 매우 모호하게 들린다. 그럼에도 불구하고 직렬화는 장시간의 저장을 위해 의도 된 것이 아니므로이를 폐기하고 다른 데이터 저장 체계를 사용하십시오. – Kayaman

답변

0

System.getProperty("java.version")을 사용하면 현재 실행중인 자바 버전을 나타내는 문자열을 가져올 수 있습니다. 그런 다음이를 역 직렬화 할 객체를 결정하는 키로 사용하십시오.

+0

나는 당신이 의미하는 바를 잘 모르겠다. 나는 모든 것을 비 역화해야한다. –

관련 문제