StreamCorruptedException: código de tipo no válido: AC

Mi problema es cuando intenta leer el objeto la segunda vez, arroja la excepción:

java.io.StreamCorruptedException: invalid type code: AC at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at Client.run(BaseStaInstance.java:313) java.io.StreamCorruptedException: invalid type code: AC at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at Client.run(BaseStaInstance.java:313) 

La primera vez que envío exactamente el mismo mensaje objeto; sin embargo, cuando bash hacer lo mismo la segunda vez, arroja el error anterior. ¿Debo volver a inicializar el método readObject ()? Incluso imprimí el objeto de mensaje que se está recibiendo en la línea siguiente y es exactamente igual a la primera instancia en que funciona bien.

 Object buf = myInput.readObject(); 

Supongo que hay algún problema con la adición, pero realmente no tengo ningún uso para agregar. Solo quiero leer una línea nueva cada vez. Realmente agradecería algo de ayuda para solucionar este error. Gracias.

===============================

Antes de esa línea, solo estoy creando los objetos de entrada y salida para el socket en el método run (). La statement de objeto está fuera del método run () en la clase: –

 @Override public void run() { try { sleep((int) 1 * 8000); } catch (Exception e) { e.printStackTrace(); } try { //Creating input and output streams to transfer messages to the server myOutput = new ObjectOutputStream(skt.getOutputStream()); myInput = new ObjectInputStream(skt.getInputStream()); while (true) { buf = myInput.readObject(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { } catch (Exception e) { e.printStackTrace(); } } } 

Tienes razón; No cierro el objeto. No estoy seguro de cómo hacer eso.

    El problema subyacente es que está utilizando un nuevo ObjectOutputStream para escribir en un ObjectInputStream existente que ya ha utilizado un ObjectOutputStream anterior para escribir. Estas secuencias tienen encabezados escritos y leídos por los respectivos constructores, por lo que si crea otro ObjectOutputStream , escribirá un nuevo encabezado, que comienza con – ¿adivina qué? – 0xAC, y el ObjectInputStream existente no espera otro encabezado en este punto, por lo que barfs.

    En el hilo de los foros de Java citado por @trashgod, debería haber omitido la parte sobre ‘de nuevo para cada objeto en ambos extremos’: eso es un desperdicio. Utilice un único OOS y OIS durante la vida útil del zócalo, y no use ninguna otra transmisión en el zócalo.

    Si quiere olvidar lo que ha escrito, use ObjectOutputStream.reset().

    Y no use otras transmisiones o Readers o Writers en el mismo socket. Las API de flujo de objetos pueden manejar todos los tipos de datos primitivos de Java y todas las clases de Serializable .