Hola:
Un StreamCorruptedException da al leer un ObjectInputStream, no al escribir, imagino que la excepción no te salta en ese trozo de código, sino cuando intentas leer luego el fichero escrito.
El posible motivo es el siguiente.
Cada vez que haces un new ObjectOutputStream(...), se envía automáticamente una cabecera de bytes. Luego puedes escribir objetos en ese ObjectOutputStream y el contenido de tu fichero será cabecera de bytes + objetos.
Cuando hacdes un new ObjetctInputStream(...) se intenta leer una cabecera de bytes escrita por un ObjectOutputStream. Luego puedes leer objetos, tantos como hayas escrito.
El problema se presenta si cuando se espera leer una cabecera de bytes no se encuentra y esto sucede si el número de new ObjectOutputStream o el sitio donde se hacen en la secuencia de escritura de ficheros, es distinto que el número de new ObjectInputStream o la secuencia en que se hace.
En tu ejemplo, si has escrito como muestras, debes leer haciendo un new ObjectInputStream y usando ese mismo ObjectInputStream para leer todos los objetos en un bucle, es decir, la misma secuencia que has hecho al escribir.
Tienes la explicación más detallada aquí
http://www.chuidiang.com/java/ficher...tosFichero.php
Se bueno.