Mój problem jest, gdy próbuje odczytać obiektowi po raz drugi, to rzuca wyjątek:StreamCorruptedException: nieprawidłowy kod typu: 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)
Pierwszy raz wysłać dokładną wiadomość samego obiektu; jednak gdy spróbuję zrobić to samo za drugim razem, spowoduje to błąd powyżej. Czy muszę ponownie zainicjować metodę readObject()? Wydrukowałem nawet obiekt wiadomości, który jest odbierany przez wiersz poniżej i dokładnie taki sam, jak pierwszy przypadek, w którym działa poprawnie.
Object buf = myInput.readObject();
Zakładam, że jest jakiś problem z dołączaniem, ale naprawdę nie mam żadnego pożytku z dołączania. Chcę za każdym razem czytać świeżą linię. Naprawdę doceniam pomoc w naprawieniu tego błędu. Dziękuję Ci.
==================================
Przed tym jednej linii, jestem właśnie tworzenie obiektów wejściowych i wyjściowych dla gniazda w metodzie run(). Deklaracja obiektu znajduje się poza metodą run() w klasie: -
@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();
}
}
}
Masz rację; Nie zamykaj przedmiotu. Nie jestem pewien, jak to zrobić.
nie jestem pewien, gdzie się zamknąć obiekt –
NB Należy złapać EOFException i nie traktować go jako błąd: nie rejestruj ani nie drukuj śladu stosu; pozwól mu zakończyć pętlę czytania. Nie wiem, dlaczego łapiesz UnknownHostException tam, gdzie jesteś: nie można go wyrzucić z odpowiedniego bloku try. Sen() to dosłownie strata czasu. Usunąć to. – EJP