您的位置:首页 > Web前端

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

2017-09-07 15:38 369 查看
背景 : 

物联网 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息