OIS 的 ClassCastException

ClassCastException at OIS

我在从 bat 文件中读取对象时收到 CCE。

装载机class:

public static void loader()throws IOException, ClassNotFoundException{
  try{
    FileInputStream fis = new FileInputStream("students.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    while(true){
      try {
       stud = ois.readObject();
       student = (Student) stud;
       studentBag.add(student);
      }catch(EOFException e){
         break;
    }  
   i++;
  }
 ois.reset();
 ois.close();
 fis.close();
}catch(FileNotFoundException e) {
 System.out.println("File not found");
}

我收到的 CCE 错误位于以下行:student = (Student) stud;

我得到的具体错误代码是 原因:java.lang.ClassCastException:[LBags.Student;无法转换为 Bags.Student

我也不确定它从哪里得到 LBags,学生来自...我没有任何包裹或 class 或任何名为 LBags

字符串 [LBags.StudentArray of Bags.Student 的内部类型签名。第一个字符[表示数组,L表示引用类型。

因此,该消息说您正在尝试将 Bags.Student 的数组转换为 Bags.Student,这显然是不可能的。因此,您的序列化数据包含一个数组,而不是标量对象。

JNI Documentation 中提供了类型签名的完整列表。为了完整起见,这里是从该文档复制的列表:

Type Signature

Z                          boolean
B                          byte
C                          char
S                          short
I                          int
J                          long
F                          float
D                          double
Lfully-qualified-class;    object of class
[type                      Array of type