職場では、Linux を実行している PC に 5 つの RFID リーダーが接続されています。リーダーはすべてキーボードとして認識され、入力 (チップから読み取ったもの) をキー入力イベント シーケンスとして送信します。どのリーダーがどのシーケンスを送信したかを判別できるようにするために、raw-read over/dev/input/XX
を実行して、この方法で入力を取得しています。
System.in
これに関する問題は、RFID リーダーによって生成されたキーボード イベントの送信がまだ "in" stdin にScanner
あることです。 " リーダーからの入力 (10 桁の 16 進数と改行 ( \n
) で構成されます)。
さて、問題は次のとおりです。これらの「保留中の」入力を標準入力からすべてフラッシュし、キーボードから本当に必要なものを読み取るにはどうすればよいですか?
私は試した:
System.in.skip(System.in.available());
しかし、シークは stdin では許可されていません (skip
をスローしますIOException
)。
for (int i = 0; i < System.in.available(); i++){
System.in.read();
}
しかし、available()
十分に見積もっていません(後で標準入力に入れます)。
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!");
同上。
もっとアイデアがある人はいますか?