Mi problema es cuando se trata de leer el objeto del segundo tiempo, se produce la excepción:StreamCorruptedException: Código de tipo no válido: AC
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 el mensaje exacto mismo objeto; sin embargo, cuando intento 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 uso para anexar. Solo quiero leer una línea nueva cada vez. Realmente agradecería algo de ayuda para solucionar este error. Gracias.
==================================
Antes de que una línea, yo soy simplemente creando los objetos de entrada y salida para el socket en el método run(). La declaración del 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();
}
}
}
Tiene razón; No cierro el objeto. No estoy seguro de cómo hacer eso.
No estoy seguro de dónde cerrar el objeto –
NB: Es preferible coger EOFException y no tratarla como un error: no inicie sesión ni imprima el seguimiento de la pila; solo deja que termine el ciclo de lectura. No sé por qué atrapas UnknownHostException donde estás: no se puede lanzar desde dentro del bloque try correspondiente. El sueño() es literalmente una pérdida de tiempo. Eliminarlo – EJP