对于其类实现Serializable的对象的notserializableexception

时间:2012-04-03 18:09:55

标签: java serialization

我有这个班级

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 个答案:

答案 0 :(得分:6)

由于wordObject是一个内部类,而内部类总是拥有对其外部类的隐式引用,因此除非外部类也可序列化,否则不能序列化内部类。实际上甚至不建议尝试;

来自serialization specification;

  

内部类的序列化(即,不是的嵌套类)   静态成员类),包括本地和匿名类   因为几个原因而强烈沮丧。因为内在的阶级   在非静态上下文中声明包含隐式非瞬态   引用封闭类实例,序列化这样的内部   类实例将导致其关联外部的序列化   类实例。

答案 1 :(得分:-3)

进行序列化时,对象可以访问的所有对象(即其成员变量及其成员的成员等)必须是可序列化的,否则会出现此异常。这是对象序列化的常见问题