Flush/Clear-System.in (stdin) Lesen, bevor

Bei der Arbeit, wir haben 5 RFID-Leser angeschlossen an einen PC mit Linux. Die Leser sind alle anerkannt, wie Tastaturen und senden Sie Ihre Eingabe (was Sie Lesen, bilden den Chip) als ein key-input-event-Sequenz. Um in der Lage zu sagen, welche reader senden welcher Reihenfolge mache ich eine raw-Lesen über /dev/input/XX erhalten Ihren Eingang auf diese Weise.

Das problem mit diesem ist, dass das senden von Tastatur-Ereignisse, die durch die RFID-Lesegeräte sind immer noch "in" stdin " und wenn ich versuche zu Lesen, von System.in über Scanner (input erzeugt werden sollen, von einer normalen Tastatur mal), bekomme ich als erstes die "pending" - input von den Lesern (die besteht aus 10 Hex-dezimal-Ziffern und ein newline (\n)).

Nun ist die Frage: "Wie kann ich flush all diese "pending" Eingabe von stdin und dann Lesen, was ich wirklich will von der Tastatur?

Habe ich versucht:

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

Aber suchen, ist nicht erlaubt, auf stdin (skip wirft ein IOException).

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

Aber available() nicht Schätzung genug (immer noch Sachen in stdin danach).

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

Aber hasNextLine() wird nie false (der Druck wird nie ausgeführt).

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

Gleiche wie oben.

Jeder, der keine Ideen mehr?

Scanner.hasNextLine() blockieren kann, wenn es keine Eingabe, so dass ich vermute, Ihr print-Anweisung wird nie ausgeführt deshalb. Keine Lösung, aber eine Beobachtung, warum zumindest einer Ihrer Ansätze ist fehlgeschlagen.
(nicht genug rep Kommentar)... Das ist genial: Dieser arbeitete für mich System.in.read(new byte[System.in.verfügbar()]) user5466753**

InformationsquelleAutor Lukas Knuth | 2013-08-16

Schreibe einen Kommentar