关于BufferefReader.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"或者回车符后面紧跟着换行符时,该行结束并返回。没有数据时,将会一直处于等待状态。因此在进行网络连接时,应该避免使用该方法。

时间: 2024-10-29 10:46:28

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

C#中Thread类中Join方法的理解(转载)

指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行      比如 Java代码   using System; namespace TestThreadJoin { class Program { static void Main() { System.Threading.Thread x = new System.Threading.Thread(new System.Threading.ThreadStart(f1)); x.Start(); Console

关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 String str  = null;br=new BufferedReader(new FileReader(fileName));do{  str

对Vue.js $watch方法的理解

博主最近对着vue.js的官方教程在自学vue.js,博主自幼愚钝,在教程中真的是好多点都不太理解,接下来要说的这个$watch方法就是其中一个不太理解的点了.咱们先来看一下对于$watch方法在vue.js的API中是怎么解释的吧:观察 Vue 实例变化的一个表达式或计算属性函数.回调函数得到的参数为新值和旧值.表达式只接受监督的键路径.对于更复杂的表达式,用一个函数取代.官方示例: 1 // 键路径 2 vm.$watch('a.b.c', function (newVal, oldVal)

【实验室笔记】serialport的readline()方法

在最近的小项目中,单片机中断优先级的问题,串口发送到上位机的数据有时会出现发送的数据被中断打断的问题. 于是,在上位机机上就容易出现错误,原来读取的方法是read()的方法,反复修改发送数据的格式依然没有好转. 后来讲将上位机的读取方式换成readline()问题得到了解决,且百发百中,问题可能归结于readline方法自身的特性吧. readline会一直在那里等候,知道接收到换行符"\r\n",所以在没有接收到完整数据时,会一直在那里等候数据的到来,不离不弃. 即便下位机的数据发送

Canavs arcTo方法的理解

arcTo方法有四个參数 參数1,2为第一个控制点的x,y坐标,參数2为第二个控制点的坐标,參数3为绘制圆弧的半径. 起点和第一个控制点组成的延长线与第一个控制点和第二个控制点组成的延长线都是和圆弧相切的,这个圆弧也就是被夹在两条延长线中间.圆越大,两条延长线能形成的角度能夹住的圆弧就越小. 以下写了一个简单的动画帮助理解 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t

用实验方法加深理解Oracle的外连接(left/right/full)和内连接(inner)

总是对Oracle的左连接.右连接以及(+)对应的外连接类型糊涂,通过实验加深对连接类型语法的理解.外连接分为三种: 1. 左外连接,对应SQL关键字:LEFT (OUTER) JOIN 2. 右外连接,对应SQL关键字:RIGHT (OUTER) JOIN 3. 全外连接,对应SQL关键字:FULL (OUTER) JOIN 左右外连接都是以一张表为基表,在显示基表所有记录外,加上另外一张表中匹配的记录.如果基表的数据在另一张表中没有记录,那么相关联的结果集行中显示为空值. 精确点说,引用MO

java中readLine()方法为什么有的行读不到?

今天在使用java对IO操作时,readLine()输出到控制台的行少了很多.后来发现readLine()实际上是一次读取一行.如果我们不话readLine()读取的行内容赋给一个字符串的话,每直接调用一次readLine()方法,实际上就是往下读一行.最后你会发现它变成了隔行读取. 下面两段代码中.直接system.out.println(br.readLine()),实际上就是输出的while循环后的下一行.当我们将readLine()的结果赋值给一个变量是,输出的是变量的内容而没有再次调用

BufferedReader源码分析之readLine方法

readLine方法是BufferedReader中一个非常常用的方法 使用它我们可以从一段输入流中一行一行的读数据 行的区分用"\r","\n"或者是"\r\n",下面就是BufferedReader中readLine的源代码 详细的分析都写在注释里了 String readLine(boolean ignoreLF) throws IOException { StringBuffer s = null; int startChar; sync

[转]Android View.onMeasure方法的理解

转自:http://blog.sina.com.cn/s/blog_61fbf8d10100zzoy.html Android View.onMeasure方法的理解 View在屏幕上显示出来要先经过measure(计算)和layout(布局).1.什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec.这两个参数指明控件可获得的空间以及