gpt4 book ai didi

java - 读取前刷新/清除 System.in (stdin)

转载 作者:太空狗 更新时间:2023-10-29 11:27:27 24 4
gpt4 key购买 nike

在工作中,我们有 5 个 RFID 读取器连接到运行 Linux 的 PC。阅读器都被识别为键盘,并将他们的输入(他们从芯片读取的内容)作为键输入事件序列发送。为了能够分辨出哪个读者发送了什么序列,我正在对 /dev/input/XX 进行原始读取,并以这种方式获取他们的输入。

问题是,当我尝试通过 Scanner(这次输入应该由普通键盘生成),我首先从读者那里得到“待定”输入(由10个十六进制数字和一个换行符(\n)组成) .

现在的问题是:如何从标准输入中清除所有这些“待定”输入,然后从键盘读取我真正想要的内容?

我试过:

System.in.skip(System.in.available());

但是在标准输入上不允许查找(skip 抛出一个 IOException)。

for (int i = 0; i < System.in.available(); i++){
System.in.read();
}

但是 available() 估计不够(之后仍然在标准输入中)。

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()){
scanner.nextLine();
}
System.out.println("Clean!");

但是 hasNextLine() 永远不会变成 false(打印永远不会执行)。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null);
System.out.println("Clean!");

同上。

有人有更多想法吗?

最佳答案

根据 @Joni 的建议,我将其放在一起:

Scanner scanner = new Scanner(System.in);
int choice = 0;
while (scanner.hasNext()){
if (scanner.hasNextInt()){
choice = scanner.nextInt();
break;
} else {
scanner.next(); // Just discard this, not interested...
}
}

这会丢弃标准输入中已经“待定”的数据,并等待输入有效数据。在此上下文中,有效表示十进制整数。

关于java - 读取前刷新/清除 System.in (stdin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18273751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com