我试图使用继承来序列化类中的实例。
这是我尝试序列化数据的类
public class Serializacion {
static int agregarProfeTitular(ProfesorTitular p){
int status = 0;
try {
FileOutputStream fos = new FileOutputStream("profestitulares.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
ArrayList pi = conseguirTodosProfesTitulares();
pi.add(p);
oos.writeObject(pi);
oos.close();
fos.close();
status = 1;
} catch (IOException e) {
System.out.println("Error al agregar el prof titular..."+Arrays.toString(e.getStackTrace()));
}
return status;
}
static ArrayList<ProfesorTitular> conseguirTodosProfesTitulares(){
ArrayList<ProfesorTitular> pi = new ArrayList<ProfesorTitular>();
try {
FileInputStream fis = new FileInputStream("profestitulares.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
pi = (ArrayList<ProfesorTitular>) ois.readObject();
ois.close();
fis.close();
} catch (Exception e) {
System.out.println("Error al conseguir a los profes titulares..."+e);
}
return pi;
}
}
最后,try-catch抛出了我
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2950)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1534)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
at profesores.Serializacion.conseguirTodosProfesTitulares(Serializacion.java:69)
at profesores.Serializacion.agregarProfeTitular(Serializacion.java:46)
我的想法是,当我想首先在我的文件中写入一些数据时,我得到已经存在的数据,将其解析为arraylist,然后我返回该arraylist,我只是添加新数据。它可以正常编写文件,但阅读它不起作用。
编辑:
这是我尝试序列化的类代码:
public class ProfesorTitular extends Profesor {
int horasBase;
public ProfesorTitular(int id, String nombre, String clase, int horasBase) {
super(id, nombre, clase);
this.horasBase = horasBase;
}
public int getHorasBase() {
return horasBase;
}
public void setHorasBase(int horasBase) {
this.horasBase = horasBase;
}
}
答案 0 :(得分:0)
FileOutputStream
创建profestitulares.txt
。序列化数据不是文本,不应保存在扩展名为.txt的文件中。ObjectOutputStream
,写入对象流标题。FileInputStream
,除了对象流标题之外,它现在是空的,无论它以前的状态如何。ObjectInputStream
,但失败了,因为此逻辑空文件中有一个流标题但没有对象。解决方案:在创建新文件之前从文件中读取对象。