【问题标题】:Type Casting Error while i try to do deserialization在我尝试进行反序列化时键入转换错误
【发布时间】:2020-11-05 14:30:28
【问题描述】:

当我在与调用它的函数相同的源包中拥有 Customer 类时,为什么会出现错误“java.lang.ClassNotFoundException: Customer”。

public void getEmployee() {
Customer cu =null;
  try {
     Customer e = new Customer();
     FileInputStream fileIn = new FileInputStream("Customers.ser");
     ObjectInputStream in = new ObjectInputStream(fileIn);
     cu =(Customer) in.readObject();
     in.close();
     fileIn.close();
  } catch (IOException i) {
     i.printStackTrace();
     return;
  } catch (ClassNotFoundException c) {
     System.out.println("Employee class not found");
     c.printStackTrace();
     return;
  }
}

【问题讨论】:

  • 我认为我们无法从您在此处显示的内容中了解您的问题。理想情况下,您应该显示此方法来自的整个文件以及文件名。还提供 Customer 类的整个文件。如果这些文件太大而无法执行此操作,则删除不重要的信息,但保留所有结构,因为这对这个问题很重要。然后,向我们解释这两个文件是如何相对于彼此位于您的磁盘上的。 “同源包”是否意味着两个文件在同一个目录下?
  • 这很令人困惑。你能分辨出编译器指出了哪一行代码吗?

标签: java typecasting-operator


【解决方案1】:

如果函数没有返回任何内容,为什么还要称它为 getter?不过,我可以指出代码中的一些错误。 fileIn.close(); 行是多余的。流已被in.close() 关闭。最重要的是,您不需要那些 return; 语句。本质上,您可以将代码简化为:

    public void getEmployee() {
        try {
            Customer e = new Customer();
            FileInputStream fileIn = new FileInputStream("Customers.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            Customer cu = (Customer) in.readObject();
            in.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

编辑
稍等。如果您收到的是"java.lang.ClassNotFoundException: Customer",则问题不在这里。它很可能在序列化部分。您可能正在尝试将空白文件转换为 Customer.在文本编辑器中打开保存的Customers.ser。如果您看不到所存储数据的相似之处,则可能是序列化问题。

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多