如何在 Java 中执行无缓冲输入(如果可能的话)?

How to perform unbuffered input in Java (if at all possible)?

Java 初学者。当我们输入一个字符串时,我们必须按下回车键让程序知道用户已经输入。

有没有办法使用另一个键而不是回车键(例如问号键)来输入字符串?

听说过“缓冲区”吗?它是一个临时存储器 space,在您输入时存储您的输入。一旦按下回车键,缓冲区就会被释放,数据就会被发送到程序中。这称为“缓冲输入”。要在不按回车键的情况下输入内容,您必须省略带缓冲区的场景,或者更准确地说,执行“无缓冲输入”。

查看此 SO post:Buffered and Unbuffered Streams in Java 了解 java 提供的无缓冲流。请注意,它们只能通俗地称为“无缓冲流”。这是因为您仍然需要按回车键(是的,只有回车键)才能将输入传递给程序。但是,您可以使用 InputStreamReader class 的 read() 函数仅以 ? 结束您的输入范围(即,在按回车键后,只有 [ 之前的字符=13=] 将被读取)。

在C/C++中,有库函数(比如微软编译器识别的conio.h头文件中的getch())允许直接无缓冲input/output。然而在 java 中,情况并非如此。如果您正在编写一个简单的控制台 I/O 程序,我不知道有什么方法可以帮助您在这种情况下进行无缓冲输入。但是,如果你正在制作 GUI 程序,你可以利用 event handling 来检测键盘上的按键按下,并直接在你的程序中使用该值,从而无需按回车键即可输入数据(实际上,输入键本身将被识别为按下的单独键,并且将 return 一个您可以使用的值。

比如可以实现KeyListener接口,在keyPressed()方法中,可以使用getkeyCode()或者getkeyChar()函数来判断key的值被按下并使用它。要清楚地说明这一点,请参阅此 SO post: .

如果你想在?键被按下时结束输入(你指的是/键),你可以只考虑?之前的按键按下按.

希望对您有所帮助。


参考参考:

InputStreamReader java文档:java.io.InputStreamReader.