【问题标题】:notserializableexception for an object whose class implements Serializable类实现 Serializable 的对象的 notserializableexception
【发布时间】:2012-04-03 18:09:54
【问题描述】:

我有这门课

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 已经实现了可序列化。

【问题讨论】:

  • objwordObject 类型的对象吗?错误说它来自searchTAemd
  • 这看起来完全可以序列化。你确定 obj 是 wordObject 的一个实例吗?
  • 我刚刚用 obj = new wordObject("foo", 3); 测试了这个它可以正常工作... obj 必须引用另一种不可序列化的类型。
  • @HunterMcMillen 是的objwordObject 类型,searchTAemd 是放置所有这些代码的类的名称。
  • 变量lineC从何而来?父类?

标签: java serialization


【解决方案1】:

由于wordObject 是一个内部类,并且一个内部类始终持有对其外部类的隐式引用,因此除非外部类也可序列化,否则您无法序列化内部类。其实不建议尝试;

来自serialization specification

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你说他的哪一部分不是可序列化的?
    • 从wordObject的类定义来看,所有的字段都是可序列化的。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2018-04-29
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2011-01-27
    • 2013-08-28
    相关资源
    最近更新 更多