Hola:
Un ObjectOutputStream es mala idea para guardar cosas y añadir luego más. Te comento el motivo.
Cuando haces un "new ObjectOutputStream()", se escriben automáticamente en el fichero unos bytes de cabecera, propios de java y sobre los que no tienes control. Cuando haces un "new ObjectInputStream()", se leen automáticamente esos bytes de cabecera, y si por el motivo que sea no se encuentran, la creación falla.
Imagina que arrancas el programa por primera vez y escribes tres camiones. En el fichero tendras los bytes de cabecera y los tres camiones. Ahora arrancas por segunda vez y escribes dos camiones más. Tendrás ahora en el fichero los bytes de cabecera, los tres camiones de antes, otra vez otros bytes de cabecera y dos camiones más.
Y ahora arrancas para leer. El new ObjectInputStream() lee los primeros bytes de cabecera, luego empiezas a leer camiones y leeras sólo tres camiones y cuando quieras leer el cuarto fallará, porque en el fichero hay un segundo grupo de bytes de cabecera que no esperas.
La solución es o bien no usar ObjectInputStream ni ObjectOutputStream y usar en su lugar algo quizás más manual, pero que te permita controlar exactamente cómo escribes y lees de fichero. O bien, crear un nuevo ObjectOuputStream por cada camion que se quieras escribir, y crear un ObjectInputStream para cada camion que se quiera leer. De esta forma siempre habrá bytes de cabecera entre camión y camión.
Es decir, para escribir
Código Java:
Ver originalpara cada camion en el array list {
oos = new ObjectOuputStream();
oos.writeObject(un camion);
}
y para leer
Código Java:
Ver originalmientras se pueda seguir leyendo {
Camion camion = (Camion)ois.readObject();
}
Se bueno.