java - 从二进制文件读取时出现 ClassCastException

标签 java serialization classcastexception randomaccessfile

我在使用通用方法读取二进制文件时收到java.lang.ClassCastException。 我试图用相同的方法读取两个不同的文件,但后来出现异常,但我不知道为什么。

这是读取文件的通用方法中的代码: Read 是类 ReadBenary 的方法部分。

 import java.io.ObjectInputStream;
 import java.io.FileInputStream;
 import java.io.IOException;

 public class ReadBinary{

private ObjectInputStream reader;

public boolean open(String name) {
    try {
        reader= new ObjectInputStream(new FileInputStream(name));
        return true;
    } catch (IOException exception) {
        System.err.println("Error");
        return false;
    }
}

public void close() {
    try {
        if (reader != null) {
            lector.close();
        }
    } catch (IOException exception) {
        System.err.println("Error");
    }
}

public <E> E read() {

    E object = null;
    try {
        object = (E) reader.readObject();
    } catch (ClassNotFoundException ex) {
        System.err.println("Class dont found");
        System.err.println(ex);
    } catch (IOException ex) {
        System.err.println("End of the file");
        System.err.println(ex);
    } catch (ClassCastException ex) {
        System.err.println("Class dont found");
    }
    return object;
}

这是主代码:

 ReadBinary reader= new ReadBinary();

      if (reader.open(file3)) {
      *  Bill bill = reader.read();
        while (bill != null) {
            manejadorBill.insert(bill);
            bill = reader.read();
        }
        reader.close();
       }

    if (reader.open(file1)) {
        Customer customer= reader.read();
        while (customer != null) {
            manejadorCustomer.insert(customer);
            customer = reader.read();
        }
        reader.close();
    }

这是在文件中写入对象的方法:

public <E> void escribir(E objeto) {
    try {
        escritor.writeObject(objeto);
    } catch (IOException exception) {
        System.err.print("Error rawr");
    }
}

BillCustomer 是两个独立的类。 当我尝试运行该程序时,它说 Customer 无法转换为 Bill

它说错误发生在带*的行。

最佳答案

file3 中似乎没有 Bill 对象。 要检查此更改,请将 read() 更改为:

public <E> E read() {
    Objject obj;
    E object = null;
    try {
          obj = reader.readObject();
          System.out.println(obj.getClass().getName())       
          object = (E) obj;
    } catch (ClassNotFoundException ex) {
        System.err.println("Class dont found");
        System.err.println(ex);
    } catch (IOException ex) {
        System.err.println("End of the file");
        System.err.println(ex);
    } catch (ClassCastException ex) {
        System.err.println("Class dont found");
    }
    return object;
}

查看实际类型。

关于java - 从二进制文件读取时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386225/

相关文章:

java - 使用 Jackson 反序列化枚举 Shape.OBJECT 失败

java - ClassCastException 从子类型到父类(super class)型(在 scala 中)

java - getDefaultSharedPreferences 处的 NullPointerException

c# - ASP.NET 自定义配置文件 serializeAs 属性

java - 当 serialVersionId 未存储在序列化对象中时,反序列化过程如何知道序列化对象的 serialVersionId?

Java/Eclipse : returning to List casted Map. 值()

java - 将对象转换为短对象

java - 当重力=顶部时,文本不会从顶部开始

java - 为货币格式化 JTable 列

java - 为什么 java.util.Set 不能返回任何值?