La questione è molto semplice: il processo di serializzazione inserisce all'inizio un "header" iniziale particolare. Poi seguono tutti gli oggetti serializzati.Originariamente inviato da Zama
Possibile che non veda il file come se gli avessi semplicemente "appeso" in coda un altro oggetto?
Facendo un "append" e aggiungendo altri oggetti, quel header viene nuovamente inserito.
Quando il processo di de-serializzazione legge dallo stream, si trova ad un certo punto con dei dati (l'header iniziale) che non corrispondono a quello che si aspetta, pertanto lo segnala come corrotto.
Morale della favola: con ObjectOutputStream non puoi appendere dati. Soluzioni per "aggirare" questo problema: leggere tutti gli oggetti, metterli in una collezione e poi riscrivere per intero il file, oppure scrivere un nuovo file, quindi muoverlo.