我在以下代码中收到ClassCastException错误

时间:2019-07-11 08:44:17

标签: java serialization deserialization

我是Java的新手,我正在学习反序列化,同时我在学习classcastexception

我在一类中进行了序列化,而另一类进行了反序列化

序列化

zipfile f = new zipfile(30,"kavin");

ArrayList<zipfile> a = new ArrayList<zipfile>(101);
a.add(f);

String file = "def.txt";
try {
    FileOutputStream fi = new FileOutputStream(file);
    ObjectOutputStream s = new ObjectOutputStream(fi);

    s.writeObject(f);
    System.out.println(f.age);
    s.close();
    fi.close();
} catch (FileNotFoundException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}

反序列化

String file = "def.txt";


try {
    FileInputStream fi = new FileInputStream(file);
    ObjectInputStream s = new ObjectInputStream(fi);
    f=(deserialization)s.readObject();
    System.out.println(f.age);
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
} 
catch (ClassNotFoundException e)
{
    e.printStackTrace();
}

}

输出

线程“ main”中的异常java.lang.ClassCastException:无法将demo2.zip文件转换为demo2.deserialization     在demo2.deserialization.main(deserialization.java:69)

1 个答案:

答案 0 :(得分:0)

在处理序列化时必须牢记以下几点:

  1. 如果父类实现了Serializable接口,则子类不需要实现,但反之亦然。
  2. 通过序列化过程仅保存非静态数据成员。
  3. 静态数据成员和瞬态数据成员不会通过序列化过程保存。因此,如果您不想保存非静态数据成员的值,请使其为瞬态。
  4. 反序列化对象时,永远不会调用对象的构造函数。
  5. 关联的对象必须实现Serializable接口。

尝试查看您的代码,查找是否是上述情况之一。

有关更多帮助,请参阅-Serialization in Java

的来源