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阻塞的机制,谢谢。

解决方案 »

  1.   

    BufferedReader b=new BufferedReader(new InputStreamReader(System.in));//应该是这里发生阻塞;
    String n2=b.readLine();//当上面接受到输入事件后,会触发这里的读
      

  2.   

    没看懂,如果发生了阻塞的话应该会等待用户输入,可是“第二个员工的姓名”没有等待用户输入。
    运行结果是这样的:
    请输入第一个员工的姓名
    fd
    请输入第一个员工的年龄
    3
    请输入第二个员工的姓名
    请输入第二个员工的年龄
    df
    请输入第三个员工的姓名
    请输入第三个员工的年龄
    4
      

  3.   

    请输入第一个员工的年龄
    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()读了