在工作中,我们将5台RFID阅读器连接到运行Linux的PC上。这些阅读器都被识别为键盘,并将它们的输入(他们从芯片上读取的内容)作为键输入事件序列发送。为了能够告诉哪个读者发送了什么序列,我正在通过/dev/input/XX
进行原始读取,并以这种方式得到他们的输入。读取之前冲洗/清除System.in(stdin)
这里的问题是,由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()'](http://docs.oracle.com/javase/7/docs/api/ java/util/Scanner.html#hasNextLine%28%29)可能会阻塞如果没有输入,所以我怀疑你的打印语句从来没有执行过这个原因。这不是一个解决方案,而是一个观察你为什么至少有一个方法失败的原因。 –
(没有足够的代表评论)......这是真棒:这个工作对我** System.in.read(新字节[System.in.available()])** ** user5466753的 – JeffBship