Java 为什么System.in.read()要等到用户按enter键?

Java 为什么System.in.read()要等到用户按enter键?,java,console,system.in,Java,Console,System.in,System.in.read()用于读取单个字符 那么,为什么它允许用户输入尽可能多的字符,直到他按下enter键 为什么不在他按下一个键并返回字符时停止 char ch = (char)System.in.read(); 如果用户输入“示例”,然后按enter键,则将ch作为e。并丢弃其他字符 如果有多个read(),就会把整个事情搞砸 那么,为什么不只取单个字符,然后返回呢?System.in是类型。这种类型的流缓存输入数据,直到识别换行符。下面的代码段显示了输出中的类型 System.o

System.in.read()
用于读取单个字符

那么,为什么它允许用户输入尽可能多的字符,直到他按下enter键

为什么不在他按下一个键并返回字符时停止

char ch = (char)System.in.read();
如果用户输入“示例”,然后按enter键,则将
ch
作为
e
。并丢弃其他字符

如果有多个
read()
,就会把整个事情搞砸


那么,为什么不只取单个字符,然后返回呢?

System.in
是类型。这种类型的流缓存输入数据,直到识别换行符。下面的代码段显示了输出中的类型

System.out.println(System.in.getClass());

System.in
的类型为。这种类型的流缓存输入数据,直到识别换行符。下面的代码段显示了输出中的类型

System.out.println(System.in.getClass());
如果有多个read(),则会把整个事情搞砸。
那么,为什么不只取单个字符,然后返回呢

要解决此问题,您可以包装标准输入,并改为使用
扫描仪
读取

对于给定的输入:

abcd
1234

以下
扫描仪
代码将仅拾取字符
a
1

// Local vars init
char ch1 = 0, ch2 = 0;

// Wrap the stdin with scanner
Scanner s = new Scanner(System.in);

if(s.hasNextLine()) ch1 = s.nextLine().charAt(0); // reads "abcd", picks just 'a'
if(s.hasNextLine()) ch2 = s.nextLine().charAt(0); // reads "1234", picks just '1'

System.out.println(ch1 + "," + ch2); // prints a,1

// Close after use
s.close();
如果有多个read(),则会把整个事情搞砸。
那么,为什么不只取单个字符,然后返回呢

要解决此问题,您可以包装标准输入,并改为使用
扫描仪
读取

对于给定的输入:

abcd
1234

以下
扫描仪
代码将仅拾取字符
a
1

// Local vars init
char ch1 = 0, ch2 = 0;

// Wrap the stdin with scanner
Scanner s = new Scanner(System.in);

if(s.hasNextLine()) ch1 = s.nextLine().charAt(0); // reads "abcd", picks just 'a'
if(s.hasNextLine()) ch2 = s.nextLine().charAt(0); // reads "1234", picks just '1'

System.out.println(ch1 + "," + ch2); // prints a,1

// Close after use
s.close();

它是面向线路的终端。只有当按下enter键时,终端才会向STDIN提供线路。Java本身只做它承诺要做的事情——一旦它有了数据。可能的重复:有用的信息/链接:是的,用户说了什么。要获得单键操作,您必须将终端设置为原始模式,并直接解释键代码。这正是我所需要的。请回答这个问题。这是一个面向线路的终端。只有当按下enter键时,终端才会向STDIN提供线路。Java本身只做它承诺要做的事情——一旦它有了数据。可能的重复:有用的信息/链接:是的,用户说了什么。要获得单键操作,您必须将终端设置为原始模式,并直接解释键代码。这正是我所需要的。请回答这个问题。我知道这一点,我只是想知道为什么在接受一个字符后没有阅读()停止。我知道这一点,我只是想知道为什么在接受一个字符后没有阅读()停止。