为什么不发生io阻塞?

zsjin0208 2005-12-03 11:33:54
int a1,a2,a3;
//Integer in=null;
System.out.println("请输入第一个员工的姓名");
BufferedReader a=new BufferedReader(new InputStreamReader(System.in));
String n1=a.readLine();
System.out.println("请输入第一个员工的年龄");
a1=System.in.read();
//a1= in.parseInt(a.readLine());

System.out.println("请输入第二个员工的姓名");
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
String n2=b.readLine();// 标记1:为什么此处不能发生i\o阻塞?
System.out.println("请输入第二个员工的年龄");
//a2= in.parseInt(a.readLine());
a2=System.in.read();

System.out.println("请输入第三个员工的姓名");
BufferedReader c=new BufferedReader(new InputStreamReader(System.in));
String n3=c.readLine(); //标记2:为什么此处不能发生i\o阻塞?
System.out.println("请输入第三个员工的年龄");
a3=System.in.read();
问题在标记1,2中。麻烦介绍一下io阻塞的机制,谢谢。
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingon 2005-12-03
  • 打赏
  • 举报
回复
请输入第一个员工的年龄
3
请输入第二个员工的姓名

System.out.println("请输入第一个员工的年龄");
a1=System.in.read();
System.out.println("请输入第二个员工的姓名");
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
String n2=b.readLine();// 标记1:为什么此处不能发生i\o阻塞?

你输入的是3回车,System.in.read()读入了3,但是没有读入回车,接着回车就被readLine()读了
zsjin0208 2005-12-03
  • 打赏
  • 举报
回复
没看懂,如果发生了阻塞的话应该会等待用户输入,可是“第二个员工的姓名”没有等待用户输入。
运行结果是这样的:
请输入第一个员工的姓名
fd
请输入第一个员工的年龄
3
请输入第二个员工的姓名
请输入第二个员工的年龄
df
请输入第三个员工的姓名
请输入第三个员工的年龄
4
crazycy 2005-12-03
  • 打赏
  • 举报
回复
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));//应该是这里发生阻塞;
String n2=b.readLine();//当上面接受到输入事件后,会触发这里的读
cenlmmx 2005-12-03
  • 打赏
  • 举报
回复
有道理

62,614

社区成员

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

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