2011-05-10 3 views
2

나는 문자열로 클래스를 직렬화 할 수 있어야합니다, 나는이 패턴을 알고 :직렬화 패턴으로 해결할 수없는 직렬화 프록시 패턴은 어떤 문제점을 해결합니까?

1) (정상) 직렬화 패턴 2) 프록시 직렬화 패턴

나는 http://lingpipe-blog.com/2009/08/10/serializing-immutable-singletons-serialization-proxy/을 읽은합니다 (프록시 직렬화 패턴에 대해 이야기하는 구글의 유일한 웹 사이트) 여전히이 패턴을 사용하여 이점 또는 이익을 찾을 수 없습니다. 어떤 사람이 정확히 프록시 직렬화 패턴이 무엇인지 설명 할 수 있습니까? 아니면 정확히 어떤 문제가 프록시 직렬화 패턴으로 해결되어 정상 직렬화 패턴이 해결되지 않습니까?

답변

1

기본 직렬화 :

  • 는 직렬화에 싱글 있어야 클래스의 여러 인스턴스를 작성합니다
  • 기발한에 즉석에서 변경 직렬화 객체에 문제가 (응?)가

두 번째 요점은 논쟁의 여지가있다. 누가 bytestream의 데이터를 변경 했습니까? 발생할 수있는 경우 비 직렬화보다 더 큰 문제가 있습니다. 보안. 서명/암호화 된 스트림이 직렬화 문제를 해결할 수도 있습니다.

첫 번째 것은 진짜입니다. 같은 싱글 톤을 몇 시간에 걸쳐 직렬화하고, 반대편으로 직렬화하고, 똥개! 다중 싱글 톤 (multitones?)이 있습니다. 그 문제는 비록 IMHO가 Singleton을 Enum으로 만드는 것으로 더 쉽게 해결된다면, JVM은 단일 인스턴스 자체를 시행 할 것입니다.

UPDATE

로는 스티브 B에 의해 지적 된 블로그 포스터 아마 오해/그가 읽은 것을 한 잘못. "직렬화, 바이트 조정, 직렬화 해제"대신 "직렬화, 클래스의 새 버전 배포, 비 직렬화"를 읽어야합니다. 예, 이것은 알려진 문제이며 Externalizable 인터페이스를 통해 클래스 직렬화를 완전히 제어함으로써이를 깔끔하게 해결할 수 있으므로 클래스의 이후 버전도 이전 버전에서 만든 스트림에서 자체 데이터를 비 직렬화 할 수 있습니다 (가능한 경우 조금도).

+1

변경된 객체의 문제 - 객체 서명 (기본적으로 serialver로 다른 결과를 줄 수있는 모든 것)을 변경하면 직렬화가 이전에 직렬화 된 객체와 호환되지 않게됩니다. 직렬화 동작을 별도의 객체로 옮기면 (물론 프록시가 호환되지 않을 때까지) 당신을 다소 격리시킬 수 있습니다. –

+0

이것은 이해됩니다. 그러나 문제는 인스턴스를 직렬화하고 숫자를 나타내는 바이트를 조정 한 다음 비 직렬화 할 수 있다는 것입니다. 이것은 같은 문제가 아닙니다 (버전 비 호환성이 아닙니다). –

+0

heys 제 질문을 업데이트했습니다 – Pacerier

관련 문제