EOFException indica que se ha llegado al final de un archivo y ya no hay nada más que leer. Por lo que si tu no pones una condición que se lea mientras haya objetos en el archivo, obviamente se va a leer hasta que se llegue al final del archivo, y como no hay ya objetos, no se podrá leer por lo que lanzará un
EOFException.
Deberías leer tu fichero así:
private List<Product> readProducts() {
List<Product> products = null;
Logger logger
= Logger.
getLogger(Principal.
class.
getName()); products = new ArrayList<>();
Product product = null;
while( (product = (Product) reader.readObject() ) != null ) {
Product product = (Product) reader.readObject();
products.add(product);
}
logger.warn(ioex.getMessage());
}
return products;
}
Como puedes ver no es que sean "erorres raros". Java tiene un amplio número de Excepciones para que el programador pueda ver el fallo con precisión. Tan solo basta analizar el rastreo de pila y darás con el problema.
Otra cosa, ¿estás usando Java 6? Lo digo porque usas Generics como en Java 6:
List<Product> products = new ArrayList<Product>();
En Java 7+, esto se hace:
List<Product> products = new ArrayList<>();
Si usas Java 6, te recomiendo que empieces a usar Java 8.
Saludos.