java中的标准输入指的是System.in还是键盘输入?概念搞不太清楚,用Scanner类从键盘输入算是标准输入吗?
先理清一些概念:每个控制台程序都有标准输入、标准输出、标准错误输出三个管道(句柄),这三个管道都可以重定向(即改变与管道关联的对象)。而标准输入默认是与键盘关联的(即从键盘获取输入),标准输出和标准错误输出默认是与显示器相关联的(即把数据和错误输出到显示器)。所以,从键盘输入不一定是标准输入(比如把数据输入到文本框也要用键盘,但这不叫标准输入,并不是所有的程序都有上面说的那3个管道),只有通过与标准输入管道关联的对象进行的输入才叫标准输入。
其次:java把标准输入管道封装到了System.in(它是一个输入流对象,它包含了一个管道对象),所以可以说通过System.in进行的输入是标准输入,而Scanner只是对这个输入流对象的再一次封装,只要System.in没重定向,那用Scanner类从键盘输入当然也算是标准输入。
标准输入
System.in作为InputStream类的对象实现标准输入,可以调用它的read方法来读取键盘数据。
read()方法:从输入流中读取数据的下一个字节。
read(byte[ ] a)方法: 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 a中。
标准输出
System.out作为PrintStream打印流类的的对象实现标准输出,可以调用它的print、println或write方法来输出各种类型的数据。
print和println的参数完全一样,不同之处在于println输出后换行而print不换行。
print输出
println输出
write方法用来输出字节数组,在输出时不换行