Why can't we read one character at a time from System.in?

后端 未结 3 1856
死守一世寂寞
死守一世寂寞 2020-11-29 10:18

The program below prints each character written on standard in, but only after a new-line has been written (at least on my system!).

public class Test {
             


        
3条回答
  •  不知归路
    2020-11-29 10:58

    What is the underlying reason for this?

    Most terminals is line buffered by default, Java does not receive input until a newline.

    Is it a limitation of Java?

    Some ancient terminals might only have line-buffered input; though it should be possible to disable buffering in most modern terminal.

    Is this behavior system-dependent (I'm on Ubuntu)? How does it work on Mac? Windows?

    Yes.

    Is it dependent on the specific terminal I run the application in? (For me it behaves like this in Eclipse and in gnome-terminal)

    Yes.

    Is there a workaround?

    There are platform specific hacks. curse in Linux and Unix-like platforms, and getch() in Windows. I'm not aware of any cross-platform way.

    related: Why "Press any key to continue" is bad idea:

    alt text

提交回复
热议问题