我的问题是当它试图读取的对象的第二时间,它引发异常: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