Il mio problema è quando si cerca di leggere l'oggetto per la seconda volta, si genera l'eccezione:StreamCorruptedException: Codice di tipo non valido: 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 prima volta che mando il messaggio esatto stesso oggetto; tuttavia, quando provo a fare la stessa cosa la seconda volta, lancia l'errore sopra. Devo re-intializzare il metodo readObject()? Ho anche stampato l'oggetto messaggio ricevuto dalla riga sottostante ed è esattamente lo stesso della prima istanza in cui funziona correttamente.
Object buf = myInput.readObject();
Sto assumendo c'è qualche problema con aggiungendo, ma ho davvero alcuna utilità per l'aggiunta. Voglio solo leggere una nuova linea ogni volta. Apprezzerei molto l'aiuto nel correggere questo bug. Grazie.
==================================
Prima che una linea, io sono semplicemente creando gli oggetti di input e output per il socket nel metodo run(). La dichiarazione dell'oggetto è esterna al metodo run() della classe: -
@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();
}
}
}
Hai ragione; Non chiudo l'oggetto. Non sono sicuro di come farlo.
non sono sicuro dove poter chiudere l'oggetto –
NB Si dovrebbe prendere EOFException e non trattarlo come errore: non registrare o stampare la traccia dello stack; lascia che finisca il ciclo di lettura. Non so perché stai rilevando UnknownHostException dove ti trovi: non può essere lanciato dall'interno del blocco try corrispondente. Il sonno() è letteralmente una perdita di tempo. Rimuoverla. – EJP