阅读前冲洗/清除System.in(stdin)
在工作中,我们有5个RFID读取器连接到运行Linux的PC。读取器都被识别为键盘,并将其输入(从芯片读取的内容)作为键输入事件序列发送。为了能够告诉哪个读者发送什么序列,我正在做一个原始阅读,/dev/input/XX
并以此方式获取他们的输入。
问题是,RFID读取器生成的发送键盘事件仍在“ stdin”中,当我尝试System.in
通过via
读取Scanner
(这次输入应由普通键盘生成)时,我首先得到“待处理” ”来自读者的输入(由10个十六进制小数位和一个换行符(\n
)组成)。
现在,问题是: ,然后从键盘上读取我真正想要的内容?
我试过了:
System.in.skip(System.in.available());
但是在stdin上不允许搜索(skip
抛出IOException
)。
for (int i = 0; i < System.in.available(); i++){ System.in.read();
}
但是available()
估计不够(此后仍会在stdin中进行填充)。
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!");
同上。
还有其他想法吗?
回答:
根据 的建议,我将其组合在一起:
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...
}
}
这将丢弃标准输入中已经“挂起”的数据,并等待直到输入有效数据为止。在这种情况下有效,表示十进制整数。
以上是 阅读前冲洗/清除System.in(stdin) 的全部内容, 来源链接: utcz.com/qa/405910.html