为什么我们不像使用输出那样简单地使用System.in.somemethod()
来获取Java中的输入?与使用System.out.println()
一样,为什么不System.in
呢?为什么输入有一个很长的过程?
答案 0 :(得分:5)
System.in
,InputStream
提供的唯一方法是read
的重载。当然,你可以这样做:
byte[] bytes = new byte[5];
System.in.read(bytes);
System.out.println(Arrays.toString(bytes));
从控制台读取五个字节。但这有以下缺点:
IOException
。 (未在上面的代码段中显示)这就是为什么人们使用Scanner
将System.in
流包装成更加用户友好的内容。
答案 1 :(得分:2)
从命令行获取输入总是比输出数据更棘手。这是因为没有办法知道输入语义正确,结构正确甚至语法正确。
如果你只想从System.out
读取 bytes ,那么输入的很多不确定性就会消失。在这种情况下,只需要考虑两件事:I / O错误和输入结束 - 这两者都存在于InputStream
中。唯一可能棘手的问题是read
可能无法返回对System.in
的单次调用中请求的所有字节。
因此,从Scanner
读取数据并不难; 解释数据 - 通常归结为解析数据或验证数据 - 是困难的部分。这就是为什么经常使用{{1}}类来理解输入。
答案 2 :(得分:-2)
正如您无法使用System.out.somemethod()
代替System.out.println()
一样,您无法使用System.in.somemethod()
代替System.in.read()
。