请教:这段程序是先接受全部输入再逐个判断,还是按照输入顺序逐个判断?以及为什么?谢谢!
public class ReadLine {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte buf[] = new byte[1024];
String strInfo = null;
int pos = 0;
int ch = 0;
System.out.println( "enter info,input bye for exit: ");
while (true) {
try {
ch = System.in.read();
} catch (Exception e) {
System.out.println(e.getMessage());
}
switch (ch) {
case '\r ':
break;
case '\n ':
strInfo = new String(buf, 0, pos);
if ( "bye ".equalsIgnoreCase(strInfo))
return;
else
System.out.println(strInfo);
pos = 0;
break;
default:
buf[pos++] = (byte) ch;
}
}
}
}
------解决方案--------------------这是Java的IO流问题, 你可以这样来理解你的程序:
调用System.in.read();的时候, 由于输入流并没有数据可以读取, 所以read()方法将会阻塞. 这时候控制台在等待你的输入, 而你的输入是以回车键来提交的.
当你按下回车键的时候, 也就激活了刚才阻塞的read()方法, 从现在开始, read()方法将一次一个字节地从输入流中读取数据, 每读取一个字节, 你程序中的switch case语句就会判断执行一次, 遇到\n就打印输出这一行, 然后通过break跳出switch, 继续下一次循环.
这时候, 由于输入流中已无数据可读取, read()方法将再次阻塞, 而等待你的输入.
如有错误之处, 欢迎大家指出讨论...