黑马程序员技术交流社区
标题:
由一个小错误引发的关于read阻塞式方法的一些感慨
[打印本页]
作者:
Neverbelazy
时间:
2013-5-1 14:40
标题:
由一个小错误引发的关于read阻塞式方法的一些感慨
本帖最后由 Neverbelazy 于 2013-5-1 14:49 编辑
先看一段简化了的代码,需求是
读取键盘输入,打印出输入结果,当输入是over时结束
import java.io.*;
public class ReadLineTest {
public static void main(String[] args) throws Exception{
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘读取
while(true){ //循环读
System.out.println(bufr.readLine());
if(bufr.readLine().equals("over"))//读到为over
break;//break
}
}
}
复制代码
打印结果是,输入打印要再按一次回车(或录入一行)才执行。
错误其实很明显, 可以发现, while中的 readLine()用了两次,由于readLine()是阻塞式的,再判断是否为over时,程序就等在原地,等待再次输入才继续执行。
而导致这样的错误存在的根本原因是代码书写的不够规范,在写程序时,一味的求快而忽略了是否该定义成局部变量?是否该给这个变量一个名字以备后面调用?
所以修改也很简单,而且修改后的代码也看起来更加规范,合理。
import java.io.*;
public class ReadLineTest {
public static void main(String[] args) throws Exception{
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘读取
String line;
while(true){ //循环读
line=bufr.readLine();
System.out.println(line);
if(line.equals("over"))//读到为over
break;//break
}
}
}
复制代码
作者:
暮夕忆夕颜
时间:
2013-5-2 14:26
学习了 楼主真心很给力 我经常图简便 ,今天看到你的这个感慨 真心受教了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2