Hola el problema por el cual solo mostraba el ultimo objeto, era porque se abria el archivo en cada escritura y copiaba encima el nuevo objeto, para poder acceder a un objeto X por el nombre, cree un hashmap en el que en cada escritura, a cada nombre se le asocia un número empezando por el 0, para realizar la búsqueda por nombre sobrecargue tu método leerArchivo.
La función hashmap.get(nombre).intValue() devuelve el entero que se asocio al crear el hashmap y como la lectura es secuencial desde que se abre el archivo lee la posición 0 objeto 0, itero las veces que sea necesarias para encontrar el objeto a mostrar.
Prueba este código tal cual está solo hice cambios en la clase Serializador, para acceder a algún dato en particular seria ser.leerArchivo("objeto.mio","Juan"); si el nombre no existe en el hasmap te lo indicara con un System.out.print.
La función hashmap.get(nombre).intValue() devuelve el entero que se asocio al crear el hashmap y como la lectura es secuencial desde que se abre el archivo lee la posición 0 objeto 0, itero las veces que sea necesarias para encontrar el objeto a mostrar.
Prueba este código tal cual está solo hice cambios en la clase Serializador, para acceder a algún dato en particular seria ser.leerArchivo("objeto.mio","Juan"); si el nombre no existe en el hasmap te lo indicara con un System.out.print.

Código (java) [Seleccionar]
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class Serializador{
// Escribe un objecto en un archivo
private ObjectOutputStream escritorArchivo = null;
// Lee un objecto que este guardado en un archivo
private ObjectInputStream lectorArchivo = null;
private Map<String, Integer> hashmap = new HashMap<String, Integer>();
private static int con = 0;
// Al metodo le pasamos el objeto que queremos serializar y lo guardará en el archivo que se le especifique al FileOutputStream (en este caso "objeto.mio")
public void escribirArchivo(Object objeto){
try{
if(escritorArchivo == null)
escritorArchivo = new ObjectOutputStream(new FileOutputStream("objeto.mio"));
escritorArchivo.writeObject(objeto);
hashmap.put(((Contacto)objeto).getNombre(), con++);
} catch(FileNotFoundException fnfex){
fnfex.printStackTrace();
} catch(IOException ioex){
ioex.printStackTrace();
}
}
public Object leerArchivo(String rutaArchivo) {
Contacto contacto = null;
try{
if(lectorArchivo == null)
lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
while(true){
contacto = (Contacto) lectorArchivo.readObject();
System.out.println(contacto.getNombre() + " " + contacto.getApellido() );
}
}catch(EOFException ex)
{
System.out.println("\nFinal de archivo");
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return contacto;
}
public Object leerArchivo(String rutaArchivo, String nombre) {
Contacto contacto = null;
int contador = 0;
try{
lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
if(hashmap.get(nombre)!= null){
int numero = hashmap.get(nombre).intValue();
while(contador <= numero){
contacto = (Contacto) lectorArchivo.readObject();
contador++;
}
System.out.println(contacto.getNombre() + " " + contacto.getApellido() );
}
else{
System.out.println("El nombre no se encuentra en el archivo");
}
lectorArchivo.close();
}catch(EOFException ex)
{
System.out.println("\nFinal de archivo");
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return contacto;
}
}