【发布时间】:2013-08-18 21:15:38
【问题描述】:
在工作中,我们将 5 个 RFID 阅读器连接到运行 Linux 的 PC 上。阅读器都被识别为键盘,并将他们的输入(他们从芯片中读取的内容)作为键输入事件序列发送。为了能够分辨哪个阅读器发送什么序列,我正在对/dev/input/XX 进行原始阅读并以这种方式获取他们的输入。
问题在于,RFID 阅读器生成的发送键盘事件仍然在标准输入中,当我尝试通过 Scanner 从 System.in 读取时(输入应该由普通键盘生成时间),我首先从读者那里得到“待定”输入(由 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!");
同上。
谁有更多的想法?
【问题讨论】:
-
Scanner.hasNextLine()如果没有输入可能会阻塞,所以我怀疑你的打印语句永远不会因为这个原因执行。不是解决方案,而是观察为什么至少有一种方法失败了。 -
(没有足够的代表发表评论)...这太棒了:这对我有用 System.in.read(new byte[System.in.available()]) 用户5466753**
标签: java linux stdin keyboard-events