当前位置: 首页 > 面试题库 >

阅读前冲洗/清除System.in(stdin)

李宜然
2023-03-14
问题内容

在工作中,我们有5个RFID读取器连接到运行Linux的PC。读取器都被识别为键盘,并将其输入(从芯片读取的内容)作为键输入事件序列发送。为了能够告诉哪个读者发送什么序列,我正在做一个原始阅读,/dev/input/XX并以此方式获取他们的输入。

问题是,RFID读取器生成的发送键盘事件仍在“ stdin”中,当我尝试System.in通过via
读取Scanner(这次输入应由普通键盘生成)时,我首先得到“待处理” ”来自读者的输入(由10个十六进制小数位和一个换行符(\n)组成)。

现在,问题是: 如何从stdin中清除所有这些“待处理”输入 ,然后从键盘上读取我真正想要的内容?

我试过了:

System.in.skip(System.in.available());

但是在stdin上不允许搜索(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!");

同上。

还有其他想法吗?


问题答案:

根据 @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...
    }
}

这将丢弃标准输入中已经“挂起”的数据,并等待直到输入有效数据为止。在这种情况下有效,表示十进制整数。



 类似资料:
  • About July的新书《编程之法:面试和算法心得》纸质版在本github上的基础上做了极大彻底的改进、优化,无论是完整度、还是最新度、或质量上,都远非博客、github所能相比。换言之,新书《编程之法》的质量远高于博客、github。 此外,散落在网上其他任何地方的“编程之法”电子材料均是盗版自本github,更无质量可言。所以,July只唯一推荐《编程之法》纸质版。 《编程之法》纸质版已于2

  • 作为对《Heterogeneour Computing with OpenCL 2.0 (Thrid Edition)》英文版的中文翻译。 本书将介绍在复杂环境下的OpenCL和并行编程。这里的复杂环境包含多种设备架构,比如:多芯CPU,GPU,以及完全集成的加速处理单元(APU)。在本修订版中将包含OpenCL 2.0最新的改进: 共享虚拟内存(Shared virtual memory)可增强

  • Elixir,[ɪ’lɪksər],意为灵丹妙药、圣水,其logo是一枚紫色水滴。 Elixir是一门建立在Erlang虚拟机上的函数式系统编程语言,支持元编程。 创始人José Valim是ruby界的知名人士。 可以把Elixir看作函数式的ruby语言,或者是语法类似ruby的Erlang。 Elixir受瞩目的主要原因,是因为它较好地结合了Erlang编程语言的各种优点,以及ruby那样简

  • 本教程主要围绕 GitBook 的安装,使用,集成,书籍发布,个性化以及实用插件几个方面。 其中借鉴了一些官方的文档以及在互联网上找到的一些内容,主要结合个人经验写成。由于经验有限,难免存在诸多疏漏或者理解不到位的地方,还请斧正! 注意:由于我已经很久没有使用 GitBook 了,GitBook 更新非常快,所以教程中提到的一些插件很可能已经不能正常使用了,特别是 multipart 插件。

  • 这是一本用于学习基本数据挖掘知识的书籍。大部分关于数据挖掘的书籍都着重于讲解理论知识,难以理解,让人望而却步。不要误会,这些理论知识还是非常重要的。但如果你是一名程序员,想对数据挖掘做一些了解,一定会需要一本面向初学者的入门书籍。这就是撰写本书的初衷。 这本指南采用“边学边做”的方式编写,因此在阅读本书时,我强烈建议您动手实践每一章结束提供的练习题和实验题,使用书中的Python脚本将其运行起来。

  • 要运行这本书中的例子,你需要一台安装了 Ubuntu Linux 10.04 的电脑,安装 Puppet 并与互联网连接。 虽然不是绝对必要的,但我还是建议准备一台咖啡机或其他形式的含咖啡因的饮料机。