2013-08-18 4 views
0

나는 readObject() 및 writeObject()를 재정 의하여 사용자 정의 직렬화를 할 수 있다고 생각합니다. 그러나 이것을 할 필요가있을 수 있습니까? 사용 사례 ?왜 사용자 정의 Java 직렬화

또한 Externalizable 인터페이스는 사용자 지정 직렬화를 제공하는 방법 일뿐만 아니라 다른 용도로도 사용할 수 있습니까?

답변

3

사용 사례, 내 머리 위로의 아웃 : 객체의 컴팩트,보다 효율적인 표현을 사용

  • 다른 비 일시적인 것들로부터 계산되는 일시적 변수의

    • 복원 값 기본값보다 직렬화 한
    • 클래스

    의 이전 버전과의 호환성을 외부화의 javadoc는 그것이 사용되는 것을 설명합니다 유지 를 위해.

  • +0

    코드에 serialVersionUID를 제공하여 이전 버전과의 호환성을 유지합니까? 내가 맞습니까? – dharag

    +1

    serialVersionUID 값을 유지하는 것이 실제로 필요하지만 항상 충분하지는 않습니다. 변경 전과 같이 객체를 읽고 클래스의 이전 직렬화 된 표현에서 클래스의 새 필드를 채워야합니다. 직렬화 할 때도 마찬가지입니다. 이전과 동일한 형식을 유지해야하지만 클래스가 더 이상 동일하지 않습니다. –

    3

    연습에서 익숙한 예 : HashMap. 복잡한 내부 구조를 많이 가지고 있지만 사용자 정의 매개 변수까지 포함하여 매우 간단한 API를 가지고 있습니다. 기본 직렬화를 사용하는 경우 빈 버킷, 버킷의 빈 부분, 배열의 모든 인덱스 등 일련의 중복 정보를 직렬화해야합니다.

    대신 HashMap은 다음과 같은 간단한 직렬화 된 형식을 정의합니다. 데이터를 다른 쪽에서 재구성하는 데 필요한 모든 데이터를 전송합니다.

    +0

    좋은 예. 전에 HashMap의 read/writeObject()를 읽지 않았습니다. 이 방법의 유용성을 보여주는 예제 인 것처럼 잘 문서화되어 있습니다. +1 –

    관련 문제