Hola a todos, hoy os explicare como utilizar la serialización en Java.
La serialización de objetos consiste en transformar los atributos de un objeto a datos para un fichero binario, esto nos hace ahorrar tiempo a la hora de programar.
Las clases para realizar una serializacion de objetos son ObjectInputStream para leer y ObjectOutputStream para escribir.
Ejemplo serialización
Para crear estos objetos deben pasarle como parámetro un FileInputStream para ObjectInputStream y FileOutputStream para ObjectOutputStream.
También debemos hacer que la clase que cree el objeto sea serializable, para ello implementaremos una interfaz llamada Serializable, debemos importarla desde el paquete java.io.
Vamos a usar la clase Empleado, recordemos esta clase antes, implementando la interfaz que hemos comentado anteriormente:
Veremos que cuando implementamos la interfaz Serializable, el nombre de la clase aparecerá subrayada en amarillo, indicando un warning, si pasamos el ratón por encima veremos una opción llamada «Add generated serial version ID» y nos añade un atributo con una serie de números, este atributo nos sirve para evitar problemas de deserializacion en un futuro, te recomiendo que siempre añadas este código.
Ahora escribiremos en un fichero binario, los datos de un objeto de la clase Empleado con ObjectOutputStream, usaremos el método writeObject(objeto_serializable)
Si abrimos el bloc de notas, veremos que ha escrito los datos del objeto.
Si queremos que no se lea un atributo de una clase, deberemos usar la palabra reservada transient.
Ahora vamos a leer los datos del fichero binario con ObjectInputStream, usaremos el método readObject(), este devolverá un objeto que este leyendo, en nuestro caso, un objeto Empleado, por lo que debemos hacer un casting.
También debemos controlar la excepción ClassNotFoundException, que saltara la excepción.
Debemos tener en cuenta que es posible que experimentemos un problema en el caso de que insertemos un objeto mas a un fichero binario que contenga objetos serializados, este no sera leído. La pregunta es ¿Porque? La respuesta es que cuando escribimos un objeto en un fichero binario ObjectOutputStream crea una cabecera al principio y cuando cerramos el fichero y volvemos a añadir un objeto crea de nuevo una cabecera, haciendo que la información a partir de esta no pueda ser leída.
Para conseguir que no cree esta cabecera debemos crear una versión de la clase ObjectOutputStream, sobrescribiendo el método que crea esta cabecera, es mas fácil de lo que parece. Veamos como seria:
La idea es que si el fichero binario existe, usaremos la clase original y si existe usamos nuestra clase creada antes. Para indicar si existe o no un fichero, se puede usar el método exists() de la clase File.
Te dejo algunos videos que te pueden ser de ayuda:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Creo que tienes un error en el último parrafo: «La idea es que si el fichero binario existe, usaremos…».
Sería así: «La idea es que si el fichero binario NO existe, usaremos…», no?
Saludos y gracias.
cuando el archivo ya existe, ¿cómo uso la clase personalizada para evitar que el programa me escriba la cabecera en el fichero?
Hola, como puedo guardar el objeto serializado en un string y recuperarlo después
Porque bota la excepcion EOFException?