2012-04-03 2 views
-1

내가 가진이 클래스가지는 NotSerializableException가 구현 직렬화

public class wordObject implements java.io.Serializable 
    { 
     String wordName; 
     int occCount; 
     int count; 
     HashMap<Integer, Double> lineDict; 
     int[] mat; 

     public wordObject(String name,int num) 
     { 
      wordName = name; 
      occCount=1; 
      count = num; 
      lineDict=new HashMap<Integer,Double>(lineC); 
      mat = new int[lineC]; 

     } 

    } 

하지만 코드 조각을 사용하여 디스크에 클래스의 인스턴스를 작성하려고 할 때

public static writeObj(WordObject obj) 
    FileOutputStream f_out = new FileOutputStream(loc); 

      // Write object with ObjectOutputStream 
      ObjectOutputStream obj_out = new ObjectOutputStream (f_out); 

      // Write object out to disk,obj is instance of wordObject 
      obj_out.writeObject (obj); 
아래에 주어진

는이 오류를

Exception in thread "main" java.io.NotSerializableException: searchTAemd 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 

어떤 도움이 가장 환영받을 것를 얻을.

편집 : HashMap에 이미 직렬화가 구현되어 있는지 확인했습니다.

+2

은'obj'는'wordObject' 유형의 객체입니까? 오류는'searchTAemd'에서 나온 것이라고 –

+0

완벽하게 직렬화가 가능합니다. obj가 wordObject의 인스턴스인지 확인 하시겠습니까? – ManojGumber

+1

방금 ​​obj = new wordObject ("foo", 3)로 테스트했습니다. 그것은 오류없이 작동 ... obj 직렬화 할 수없는 다른 형식을 참조해야합니다. – Adam

답변

6

wordObject은 내부 클래스이고 내부 클래스는 항상 외부 클래스에 대한 암시 적 참조를 보유하므로 외부 클래스도 직렬화 가능하지 않으면 내부 클래스를 직렬화 할 수 없습니다. 실제로 시도하는 것도 권장하지 않습니다.

serialization specification에서부터; 로컬 및 익명 클래스 포함한 내부 클래스 ( 고정 부재 클래스없는 즉 중첩 클래스)의

직렬화, 강하게 몇 가지 이유로 인해 좌절된다. 비 정적 컨텍스트에서 선언 된 내부 클래스 에는 암시 적 비 일시적인 참조를 포함하는 내부 클래스가 있으므로이 내부의 클래스 인스턴스를 serialize하면 연결된 외부의 클래스 인스턴스도 직렬화됩니다.

-3

직렬화를 수행 할 때 객체에 접근 할 수있는 모든 객체 (즉, 멤버 변수 및 멤버의 멤버 등)는 직렬화 가능해야하며 그렇지 않으면이 예외가 발생합니다. 이것은 객체 직렬화에 공통적 인 문제입니다

+0

그의 수업에서 어떤 부분을 말하는 것이 Serializable이 아닌가? –

+0

wordObject의 클래스 정의에서 모든 필드를 직렬화 할 수 있습니다. – ManojGumber

관련 문제