现象
在Java Socket进行网络通信过程中,通过socket.getInputStream()方法获取到InputStream后,创建ObjectInputStream对象,同理创建ObjectOutputStream对象,进行对象传输时,发生阻塞现象
原因分析
这是因为当从InputStream创建一个ObjectInputStream时,需要从流中读入并验证一个Header,这时如果对方的ObjectOutputStream没有写入一个Header,ObjectInputStream的构造函数便会阻塞(block)。
解决方法
调整ObjectInputStream与ObjectOutputStream的声明顺序
- 比如:主机端先建立ObjectInputStream后建立ObjectOutputStream,则对应地客户端要先建立ObjectOutputStream后建立ObjectInputStream