关于BufferefReader.readLine()方法的理解

来源:互联网 发布:php代理商系统源码 编辑:程序博客网 时间:2024/06/06 00:39

背景 : 

物联网 Esp8266 + Android App

死活收不到 Esp8266发送的测试数据, 最后在同学暴力 debug 的过程中(非常感谢这位同学), 注意到了 读输入流的 readline 的操作。。以前做的项目 真的是没注意这点。。赶紧写了篇博客 作为 以后对 自己的提醒。

有以下代码:      

复制代码
 1 BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in)); 2 String msg=null; 3 System.out.println("out of while loop!"); 4 while((msg=localReader.readLine())!=null){ 5     System.out.println(msg) 6     if(msg.equals("bye")){ 7         break; 8     } 9                     10 }    
复制代码

 

仔细读下面的这句话:  

本来以为localReader.readLine()读取不到数据时会返回null,结果执行代码后不输入数据时一直停留在while循环体内等待,故readLine()方法是一个阻塞函数。Java API文档如下描述:

public String readLine()throws IOException
  Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.

  表示该方法读取一行文本,当遇到换行符"\n",回车符"\r"或者回车符后面紧跟着换行符时,该行结束并返回。没有数据时,将会一直处于等待状态。因此在进行网络连接时,应该避免使用该方法。


参考:

http://www.cnblogs.com/wuchaodzxx/p/5515316.html

http://blog.csdn.net/i_lovefish/article/details/12776739