尝试读取序列化文件

Trying to read a serialized file

我一直在尝试读取此文件并将每个对象添加到 ArrayList 中。问题是它永远不会进入 while 循环。

你们知道可能是什么问题吗?我可以改进代码的语法吗?

public ArrayList<Notificacion> obtenerListaNovedades() {
    ObjectInputStream ois = null;
    try {
        if (f.exists()) {
            FileInputStream fis = new FileInputStream(f);
            ois = new ObjectInputStream(fis);
            while (true) {
                Notificacion notificacion = (Notificacion) ois.readObject();                    
                listaNotificaciones.add(notificacion);        
            }
        } else {
            System.out.println("hay algo ene l archi");
        }           
    } catch (Exception e) {

    }
    return listaNotificaciones;
}

永远不要吞掉异常,否则你将不知道哪里出了问题

改为

catch (Exception e) {
   e.printStackTrace ();
}

您最有可能在尝试读取文件时遇到异常,并且因为您没有对异常执行任何操作,所以您不知道发生了什么。最起码把异常的内容打印到控制台看看:

e.printStackTrace();
e.getMessage();

因此,再次查看异常并从那里开始。

那个while循环只有在异常发生时才会退出。最好用布尔值控制循环,然后通过将布尔值设置为 false 来捕获 EOFException 以退出循环。类似于:

boolean hasObjects = true;

while (hasObjects) {
    String notificacion = null;
    if (ois != null) {
        try {
            notificacion = (Notificacion) ois.readObject();
            listaNotificaciones.add(notificacion);
        } catch (EOFException e) {
            hasObjects = false;
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }
    } else {
        hasObjects = false;
    }
}