2009-12-06 4 views
1

비교기를 사용하여 TreeMap을 직렬화 할 수 있습니까 ??자바 직렬화 비교기

나는 비교자를 추가 할 때 비교기없이 트리 맵을 잘 직렬화한다. 예외를 던진다.

비교기를 일시적으로 선언해도 여전히 작동하지 않습니다. 모든 트리 맵을 일시적으로 만들면 작동하지만 그럴 경우 트리를 직렬화하지 않습니다.

+0

직렬화하려는 클래스의 객체는 무엇입니까? –

+0

프로그램의 모든 클래스가 serialize를 구현하고 가져옵니다. 동물원 클래스 – d0pe

+2

예외를 제공하십시오. 비교기가 직렬화 할 수 없지만 스택 추적에서 어떤 클래스가 실패했는지를 알 수 있습니다. – PSpeed

답변

8

직렬화하려고하는 모든 클래스는 java.io.Serializable 인터페이스를 구현해야합니다. 또한 클래스의 각 멤버 변수는 Serializable이어야합니다. 사실, 전체 계층 구조가 있어야합니다.

+0

**이 정답이어야합니다 **. http://java.sun.com/j2se/1.4.2/docs/api/java/io/NotSerializableException.html – pstanton

+0

문제 일 수 있습니다. 저는 약간 고글 거리고 비교기가있는 트리 맵이 있는지 알지 못합니다. Serializable – d0pe

+0

TreeMap은 Serializable입니다. 다른 곳을 봐. – Bozho

0

자세한 내용은 this을 참조하십시오. (다른 곳에서이 문서에 언급 된 바와 같이) 기타 고려할 사항 :

  • 버전 개체에 대한
  • 사용자 정의 직렬 형태를 개체의 필드는 직렬화해야 무엇을 사람이 과도
을있는
  • +0

    그것은 마틴의 질문이었습니다. – pstanton

    +0

    필자는 그것을 읽고 형식으로 보면 트리 메 패이지는 직렬화 가능하며 필드 비교기는 거기에 있지만 일부 테스트 후에는 작동하지 않습니다. 이 페이지를 보았습니다 : http://www.cs.chalmers.se/~catarina/java1.5/jsr-14- public-draft/collections-javadoc/serialized-form.html – d0pe

    -1

    Comparator 필드를 인스턴스 멤버가 아닌 정적 멤버로 변경하는 것만 큼 간단 할 수도 있습니다.

    public final static Comparator<String> ID_IGN_CASE_COMP 
    

    다른 모든 필드가 Serializable인지 확인해야하지만 시작해야합니다.

    +0

    이것은 아닙니다. 그 때문에, Comparator는 직렬화 가능하지 않습니다 만, 일시적이라고 선언해도, Comparator를 사용하는 TreeMap가 있기 때문에 (자) 슬로우됩니다. – d0pe

    +0

    그렇다면 반드시 Comparator Serializable을 만드는 것이 좋습니다. –

    0

    TreeMap은 특별한 일을하지 않습니다. 여기. 직렬화하는 TreeMap와 비교하지 않는 것의 유일한 차이점은 ... 비교기가 직렬화 할 수 없다는 것입니다.

    비교기를 어떻게 구현합니까? transient 선언은 Transient 참조가없는 TreeMap 클래스에 의미가 없습니다.

    예외는 무엇입니까?