我的問題是當它試圖讀取的對象的第二時間,它引發異常:StreamCorruptedException:無效類型代碼: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)
我第一次發送完全相同的對象消息;然而,當我第二次嘗試做同樣的事情時,它會拋出上面的錯誤。我是否需要重新初始化readObject()方法?我甚至打印出下面一行正在接收的消息對象,它和第一個正確的消息對象一樣。
Object buf = myInput.readObject();
我假設有一些附加問題,但我真的沒有用於追加。我只是想每次都讀一條新線。 我真的很感謝在修復這個bug方面的一些幫助。謝謝。
==================================
這一行之前,我只需在run()方法中爲套接字創建輸入和輸出對象即可。對象聲明在類的run()方法之外: -
@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();
}
}
}
你是對的;我不關閉對象。我不知道該怎麼做。
我不知道在哪裏關閉對象 – 2010-03-06 16:53:33
NB你應該抓住EOFException類,而不是把它作爲錯誤:不記錄或打印堆棧跟蹤;讓它終止閱讀循環。我不知道爲什麼你捕捉到UnknownHostException,你不能在相應的try塊內拋出它。睡眠()實際上是浪費時間。去掉它。 – EJP 2014-09-08 22:47:32