Problemas sobre el final de archivo cuando deserializo objetos

Buenas noches, así es me presenta un problema de diseño pues hace lo que quiero.

Tengo un conjunto de objetos que voy a escribir en el archivo pero no se si es la manera más adecuada de manejar la excepción EOFException cuando llegue al fin del archivo, o hay algún metodo de la clase ObjectInputStream que me permita saber cuando llego al final del stream envuelto (FileInputStream en mi caso) porque la mejor manera que pude conseguirme fue cachar la excepción espero sus respuestas y como siempre muchas gracias.

public static void readPersistedFile(){
        try{            
            FileInputStream fis = null;
            ObjectInputStream ois = null;                
            try{
                fis = new FileInputStream("DepartmentInfo.dat");
                ois = new ObjectInputStream(fis);  
                Object obj;    
                try{
                    while((obj=ois.readObject())!=null){
                        System.out.println(obj);
                    }
                }catch(EOFException e){
                   
                }    
            }finally{
                if(ois!=null){
                    ois.close();
                }
            }
        }catch(Exception e){
            System.out.println(e.getMessage());          
        }
                     
    }
   

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

invalid stream header:

Imagen de julgo

no tiene

la clase ObjectInputStream no tiene un método para verificar el final del archivo asi que parece que cachar la excepción esta bien , ya solo tendrías cambiar las condicionales del while ya que no sirven para nada

while((obj=ois.readObject())!=null)

por  while(true) , o mejor aun si tienes manera de saber la cantidad de objetos guardados el infaltable for

for (int i=0;i<cantidad_objetos;i++)

Imagen de ezamudio

available

Puedes preguntarle al FileInputStream si todavía hay algo más que leer con available(), si te da 0 es que ya llegó al final del archivo.

Pero, si el archivo está dañado o te pasan un archivo inválido, se arrojará una excepción distinta cuando quieras leer objetos con el ObjectInputStream, debes manejar esa excepción específica.

Cachar Exception no es una buena idea, y menos si lo único que haces es imprimir el mensaje (ni siquiera el stack trace).

Imagen de julgo

pues si available

cierto @ezamudio con el FileInputStream si podría saberse a pesar que comúnmente la excepción ocurrirá una sola ves por cada lectura del archivo .

Imagen de Cid

El stacktrace

Y el stacktrace ni en la enseñanza es bueno ? lo veo en varios libros e incluso en los manuales de oracle.