阅读前冲洗/清除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

回到顶部