【日常排雷】——Java中InputStreamReader类read()读取完后不返回-1,反而挂起的问题
今天在写一个Server端接受Client端传过来的数据时,用了这么样个写法:
while ((len = reader.read(chars))!= -1){
String s = new String(chars,0,len);
//处理读入的数据
}
在网上看别人介绍Socket类用法的时候也大都这么使用这种方式接收数据。
read()源码注释也指出当读完数据时返回-1。
然而,当我跑程序的时候却发现,read()执行第二次的时候,当前线程会挂起。
后来在网上查阅相关问题后了解,只有在Writter调用closed的后,reader才会在读完数据后返回-1,否则进程会一直挂起在这里。