微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在读取前冲洗/清除System.instdin

在工作中,我们有5个RFID阅读器连接到运行Linux的个人电脑上。 读者都被识别为键盘,并将它们的input(他们从芯片上读取的内容)作为键input事件序列发送。 为了能够告诉哪个阅读器发送了什么序列,我正在对/dev/input/XX进行原始读取,并以这种方式得到它们的input。

问题在于,由RFID阅读器生成的发送键盘事件仍然是“in”stdin,当我试图通过Scanner从system.in读取(这次input应该由普通键盘生成)时,我首先从读取器(包含十个hex十进制数字和一个换行符( n ))获得“挂起”input。

现在,问题是: 如何从标准input中清除所有这些“未决”input ,然后从键盘读取我真正想要的内容

我试过了:

C ++控制台键盘事件

sendinput()和非英文字符和键盘布局

不能中断lock.acquire(),而我可以中断time.sleep()

数字键盘事件导致来自GetKeyboardState的卡住键

可以在Shift,Ctrl,Alt或Win键之一中使用其他用途,例如键入文本?

system.in.skip(system.in.available());

但是stdin不允许seek( 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!");

同上。

任何人有更多的想法?

发送键盘到应用程序在c#(sendkeys,postmessage,sendmessage都不工作)

如何将键盘事件发送到Windows中的所有types的应用程序?

Python Tkinter使用键盘快捷方式去除窗口

用linux c shell上的向上箭头显示最后的命令

什么是Win32的虚拟键码0xFF用于和logging的地方?

根据@Joni的建议,我把这些放在一起:

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... } }

这将丢弃标准输入中已经“等待”的数据,并等待输入有效数据。 在这种情况下有效,意味着一个十进制整数。

没有内置的便携式方法来刷新输入流中的数据。 如果您知道未完成的数据以n结尾,为什么不读取,直到找到它?

这对我有

system.in.read(new byte[system.in.available()])

设备通常使用定义好的协议发送数据,您可以使用该协议来解析数据段。

如果我是正确的,丢弃协议格式不正确的数据。 这可以让你过滤掉你不感兴趣的数据。

由于我不熟悉你使用的RFID扫描仪,我不能有更多的帮助,但这是我的建议。

你可以用多个线程来做到这一点。

您的真实应用程序将从连接到PipedOutputStream的PipedInputStream中读取

您需要连续从system.in读取一个线程。 只要真正的应用程序对来自system.in的数据不感兴趣(由一个布尔标志表示),该线程就会丢弃它读取的所有内容。 但是,当真正的应用程序设置标志来表明它对来自system.in的数据感兴趣时,则该线程将所有读取的数据发送到PipedOutputStream。

您的真实应用程序会打开标志来指示它对数据感兴趣,并在数据不再感兴趣时清除该标志。

这样,来自system.in的数据总是自动刷新/清除

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐