在读取前冲洗清除System.in(stdin)

在读取前冲洗清除System.in(stdin),第1张

概述在读取冲洗/清除System.in(stdin)

在工作中,我们有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的数据总是自动刷新/清除

总结

以上是内存溢出为你收集整理的在读取前冲洗/清除System.in(stdin)全部内容,希望文章能够帮你解决在读取前冲洗/清除System.in(stdin)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存