2012-03-08 6 views
0

정적 HashMap에서 데이터를 직렬화해야한다. 이지도가 존재하는 클래스의 인스턴스가 없기 때문에이 정적 데이터가 필요합니다. 나는 직렬화 가능 인터페이스를 구현하고이 두 가지 방법을 구축 :직렬화를위한 메소드는 결코 호출되지 않았다

private synchronized void writeObject(ObjectOutputStream out) throws IOException 
{ 
    System.out.println("start serialization ..."); 

    Collection<TaskUpdateListener> tasks = listeners.values(); 
    out.writeInt(tasks.size()); 
    for(TaskUpdateListener task : tasks) 
    { 
     out.writeObject(task); 
    } 
} 

private synchronized void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException 
{ 
    System.out.println("start deserialization ..."); 

    int size = in.readInt(); 
    for(int index = 0; index < size; index++) 
    { 
     addTaskUpdateListener((ComponentScheduleTable) in.readObject()); 
    } 
} 

을하지만이 방법은 호출되지 않습니다. 누구나이 문제와 동일한 문제 또는 해결책이 있습니까?

+3

어떻게 수업을 사용하고 있습니까? 직렬화 코드를 살펴보면 호출되지 않는 이유를 알아 내기가 어렵습니다. – twain249

+1

그냥 HashMap을 직렬화하지 않는 이유는 무엇입니까? –

+0

클래스에는 정적 메서드 만 있고 일부 정적 변수에는 user_id가 일부 캐시됩니다. – Happo

답변

1

private void writeObject(ObjectOutputStream out) throws IOException 
    { 

     System.out.println("start serialization ..."); 

     Collection<TaskUpdateListener> tasks = listeners.values(); 
     out.writeInt(tasks.size()); 
     for(TaskUpdateListener task : tasks) 
     { 
      out.writeObject(task); 
     } 

    } 

동기화 키워드, 방법은 동기화 블록이 켜지지하지라고한다보십시오.

+0

이것은 해결책이 아니었지만 감사합니다. – Happo

+0

당신을 환영합니다. 그러나 나는 그것이 작동 할 것이라고 생각한다 (동기화 된 키워드는 삭제되었다 :)). 나는 모두 제거한다. –

1

synchronized을 삭제하십시오. 이 메서드는 thread 세이프가 아니면 안됩니다. 동기화가 필요하면 교착 상태를 피하기 위해 다르게 구현해야합니다 (예 : 잠금).

[편집] 왜 방법이 호출되지 않습니다 두 가지 이유가있을 수 있습니다 : 서명은 100 % 정확

  1. 하지

  2. 이러한 인스턴스는 항상 transient

  3. 로 표시됩니다
+0

이것은 효과가 없다. 웹상에서 두 변종을 찾았습니다. 하지만 팁 주셔서 감사합니다. – Happo

0

나는이 정적 데이터가 필요합니다. 이지도가있는 에있는 클래스의 인스턴스가 없습니다.

그건 의미가 없습니다. 인스턴스가없는 경우 맵을 가져올 수 없으므로 직렬화 할 수 없으며 인스턴스가 존재하지 않으면 맵도 존재하지 않습니다.

어쨌든 맵에 대한 참조가있는 경우 그냥 직렬화하기 만하면 readObject/writeObject 개의 메소드를 작성할 필요가 없습니다. 지도를 인수로 사용하여 ObjectOutputStream.writeObject()으로 전화하십시오.

관련 문제