请教:这段程序是先接受全部输入再逐个判断,还是按照输入顺序逐个判断?以及为什么?谢谢!

dancerLee 2007-09-06 02:45:25
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;
}
}
}

}
...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dancerLee 2007-09-10
  • 打赏
  • 举报
回复
谢谢~~~
说的挺有道理!
jk88811 2007-09-06
  • 打赏
  • 举报
回复
这是Java的IO流问题, 你可以这样来理解你的程序:

调用System.in.read();的时候, 由于输入流并没有数据可以读取, 所以read()方法将会阻塞. 这时候控制台在等待你的输入, 而你的输入是以回车键来提交的.

当你按下回车键的时候, 也就激活了刚才阻塞的read()方法, 从现在开始, read()方法将一次一个字节地从输入流中读取数据, 每读取一个字节, 你程序中的switch case语句就会判断执行一次, 遇到\n就打印输出这一行, 然后通过break跳出switch, 继续下一次循环.

这时候, 由于输入流中已无数据可读取, read()方法将再次阻塞, 而等待你的输入.


如有错误之处, 欢迎大家指出讨论...

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧