Flush/Système Clair.dans (stdin) avant de lire

Au travail, nous avons 5 lecteurs RFID attachée à un PC équipé de Linux. Les lecteurs sont tous reconnus comme les claviers et les envoyer leurs commentaires (ce qu'ils ont lu la forme de la Puce) comme une clé d'entrée de séquence d'événements. Pour être en mesure de dire qui de lecteur d'envoyer ce que la séquence, je suis en train de faire un cru lire sur /dev/input/XX et d'obtenir leurs commentaires de cette façon.

Le problème avec cela est que de l'envoyer clavier-les événements générés par les lecteurs RFID sont toujours "dans" stdin et lorsque je tente de lire à partir de System.in via Scanner (entrée doit être généré par un clavier normal cette fois), j'ai d'abord obtenir le "en attente" d'entrée pour le lecteur (qui se compose de 10 Hex-chiffres décimaux et un retour à la ligne (\n)).

Maintenant, la question est: Comment puis-je vider toutes ces "en attente" d'entrée est à partir de stdin et puis lire ce que j'ai vraiment envie de le clavier?

J'ai essayé:

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

Mais chercher n'est pas autorisée sur stdin (skip jette un IOException).

for (int i = 0; i < System.in.available(); i++){
  System.in.read();
}

Mais available() n'a pas d'estimer assez (encore des trucs dans stdin après).

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()){
  scanner.nextLine();
}
System.out.println("Clean!");

Mais hasNextLine() ne devient jamais false (l'impression de ne jamais s'exécute).

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null);
System.out.println("Clean!");

Même que ci-dessus.

Quelqu'un avec plus d'idées?

  • Scanner.hasNextLine() peut bloquer si il n'y a pas d'entrée, alors je soupçonne votre rapport d'impression ne s'exécute jamais pour cette raison. Pas une solution, mais une observation de pourquoi au moins l'un de vos approches a échoué.
  • (pas assez de rep pour le commentaire)... C'est génial: Cela a fonctionné pour moi Système.dans.lire(new byte[Système.dans.disponible()]) user5466753**
InformationsquelleAutor Lukas Knuth | 2013-08-16