在socket编程中,若是在一个while循环中使用:编程
ObjectInputStream reader = new ObjectInputStream(socket.getInputStream); reader.readObject();
可能会出现EOFException,
看了网上的不少答案和解释,以为都不对,网上都说是由于已经到达文件末尾了,而reader
还在读取数据,因此在报错
其实,这是不对的,在循环中调用它本没有错,在while
循环中若是没有数据可读了,它会自动阻塞,有数据来的时候就会读,因此在这种状况下根本不会出现socket
到达文件末尾了,而reader还在读设计
的问题,那么出现这种状况的缘由是什么呢?
实际上是代码业务逻辑的问题,致使reader
在读的时候,socket被关闭,reader被关闭,链接被关闭等等,因此彻底是代码设计的问题,code
另外在使用ObjectOutputStream
和ObjectInputStream
的时候要注意一个问题,这二者建立的顺序须要遵循必定的约定,ObjectInputStream
的建立须要ObjectOutputStream
建立后的一些数据,因此它通常在ObjectOutputStream
以前。建立好ObjectOutputStream
以后,还会先向流中先写入4个字节的数据,建立ObjectInputStream
的时候会相应的将其读出来,因此,不能屡次建立ObjectOutputStream
,由于这会致使屡次写入数据,get