Hola:
Cuando creas un ObjectOuptutStream, java escribe unos bytes de cabecera en él. Luego puedes escribir objetos.
Cuando creas un ObjectInputStream, java intenta leer unos bytes de cabecera, luego puedes leer objetos.
Por ello, es importante crear ObjectOutputStream al escribir y ObjectInputStream al leer de la misma forma, para que las cabeceras se escriban/lean igual. Me explico.
Si creas un ObjectOutputStream para escribir cada objeto (es lo que haces en el metodo setVehiculo()), en el fichero estas escribiendo cabecera de bytes, objeto, cabecera de bytes, objeto, cabecera de bytes, objeto...
Para leer, debes leer igual, crear un ObjectInputStream para cada objeto que quieras leer, de forma que leas cabecera de bytes, objeto, cabecera de bytes, objeto, ... No lo estás haciendo así, en el metodo main() estás creando un único ObjectInputStream e intentando leer todos los objetos, es decir, estás intentando leer cabecera de bytes, objeto, objeto, objeto, ... El resultado es el StreamCorruptedException.
Más detalles en
http://www.chuidiang.com/java/ficher...tosFichero.php
Se bueno.