在工作中,我们将 5 个 RFID 阅读器连接到运行 Linux 的 PC 上。阅读器都被识别为键盘,并将他们的输入(他们从芯片中读取的内容)作为键输入事件序列发送。为了能够分辨哪个阅读器发送什么序列,我正在做一个原始阅读/dev/input/XX
并以这种方式获取他们的输入。
这样做的问题是,RFID 阅读器生成的发送键盘事件仍然“在”stdin 中,当我尝试从System.in
via读取时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!");
和上面一样。
有更多想法的人吗?