在System类中,有两个静态成员变量:
- public static final InputStream in 通常,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。
- public static final PrintStream out 通常,此流对应于显示输出或由主机环境或用户指定的另一个输出目标。
当我们使用in方法来进行数据的输入时,会发现,由于字节流的缘故且是UTF-8编码,无法读取“中文”
public static void main(String[] args) throws IOException { //public static final InputStream in 通常,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。 InputStream is = System.in; //字节流写数据 int by; while ((by=is.read())!=-1){ System.out.print((char)by); } }
此时我们就需要用到转换流来进行字节流-->字符流的转换
转换成字符流后,读取数据操作除了一次读取一个字节、一次读取一个字节数组外,如果使用到一次只读取一行数据时,还需要用到字符缓冲输入流的特有方法,于是还需要将字符输入流包装成字符缓冲输入流
public static void main(String[] args) throws IOException {
//public static final InputStream in 通常,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。
InputStream is = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.println("请输入一个字符串:");
String s = br.readLine();
System.out.println("你输入的字符串是:"+s);
System.out.println("请输入一个整数:");
int i = Integer.parseInt(br.readLine());
System.out.println("你输入的整数是:" +i);
}
运行结果:
通过上述操作后,会发现,手动实现键盘录入数据的代码实现过于复杂而且不方便,所以Java为我们提供了一个工具类:Scanner
通过Scanner来调用System.in来实现键盘录入数据的功能,十分的方便
原文:https://www.cnblogs.com/pxy-1999/p/12752239.html