OIS的ClassCastException

时间:2016-05-07 03:04:58

标签: java object classcastexception objectinputstream bag

我正在从bat文件中读取对象时获取CCE。

loader 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,学生来自...我没有任何包或类或任何名为LBags

1 个答案:

答案 0 :(得分:0)

字符串[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