标准输入流 自己包装System.in 为什么还是会等待用户输入

1、由于System.in 连接的是程序和控制台

如果控制台没有输入任何东西,那么包装后的readLine() 就只有等待

readLine()是读取一行,控制台什么都没有,readLine()怎么知道换行符在哪里,怎么停止下来,

所有就会等待用户输入,如果直接就输入回车,那么readLine()方法就马上执行完了,

所有当我输入回车后,readLine()方法才能执行完,接着才能执行后面的代码。

2、代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;


public class MyScanner {
   
 private BufferedReader br;
 public MyScanner(InputStream is){
  //因为系统标准输入流是一个字节流,用户无法输入字节
  //将其转换为字符流
   br = new BufferedReader(new InputStreamReader(is));
 }
 public String readLine(){
  
  try {
   //接收键盘输入
   return br.readLine();

//由于br这个流,连接的是控制台,必须读取到换行符,方法才能结束,而现在控制台               

//  什么都没有,所以会停留在这里,用户可以输入,只有输入换行符才会结束这个方法
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return null;
 }
 //根椐用户需要将键盘输入转为字符串和数字
 public String nextLine() {
  
   return readLine();
 }
 public int nextInt(){
  return Integer.parseInt(readLine());
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  MyScanner sc = new MyScanner(System.in);
  String s = sc.nextLine();
  System.out.println(s);
  int i = sc.nextInt();
  System.out.println(i);
 }


 
}

你可能感兴趣的:(java,IO)