今天做了关于ObjectInputStream ObjectOutputStream的一个Java项目
解决方案 不要把ObjectOutputStream的资源释放了 不要close()
详细原因如下:
结果客户端 的 ObjectInputStream抛异常
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2681)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3156)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
at cangchu.Client.run(Client.java:210)
at java.lang.Thread.run(Thread.java:748)
客户端部分代码如下
ois = new ObjectInputStream(client.getInputStream());//这一句抛异常了
fileInfo fi = (fileInfo)ois.readObject();
找了挺久,结果没想到是
服务端的ObjectOutputStream不小心被我给关了
服务端部分代码如下
finally {
try {
//不要关闭客户端就不会抛异常了
oos.close();//释放ObjectOutputStream资源
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如果出现以下异常也可以参考这篇文章
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1601)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at cangchu.Client.run(Client.java:212)
at java.lang.Thread.run(Thread.java:748)