Java BufferedReader действие на символ? - PullRequest
1 голос
/ 13 июля 2010

enter code here Я читаю поток с устройства в Linux, которое содержит шестнадцатеричные буквы и ограничено «^ M».Всякий раз, когда устройство готово для получения дополнительной информации, оно отправляет символ «>».Поток выглядит так:

^M^M01 02 F3^M00 01 F3 3E^M>"

Мне нужно обнаружить символ> и выполнить действие с этим символом.Есть ли способ, которым я могу разделить символ «>» и прочитать этот символ?

По сути, в настоящее время он выглядит так

 01 02 F3
00 01 F3 3E

Мне нужно>, чтобы вызвать отдельное действие.Он не запускает буфер чтения, если по какой-то причине там находится только один символ.Я допущу на ^ M.Мне нужно> сделать что-то еще.

1 Ответ

1 голос
/ 13 июля 2010

Это вполне возможно сделать.Недавно я написал проект, который считывал входные данные от нескольких мышей, используя очень похожий интерфейс.Двоичные данные от мышей поступили через файловый ввод / вывод.

Я думаю, что буферизованный ввод / вывод здесь неуместен.Буферизованный ввод / вывод попытается заполнить буфер для вас из соображений производительности.Но кажется, что ваше приложение будет проводить большую часть своего времени в ожидании новых персонажей.Если вы не читаете массово, то необработанные чтения байтов InputStream помогут: они будут возвращены сразу после получения запрошенного / ожидаемого количества байтов (1 в вашем случае).В вашем случае после прочтения символа > вы должны выполнить еще одно однобайтовое чтение для следующего символа.

Вам необходимо выяснить, что делать с промежуточными символами.Как только вы обработали > и следующий символ, что вы хотите делать со всеми следующими символами, которые не >?

Что я делал в своем приложении, так это непосредственно читал отдельные байты изInputStream.Это заблокировало бы, поэтому это должно было быть сделано в отдельном Thread, который проводил большую часть своего времени в ожидании.Когда появился первый персонаж, я знал, что нужно прочитать еще немного (точно так же, как вы), который я мог бы затем обработать.У меня была настроена какая-то очередь для передачи этой информации остальной части моего приложения - вам нужно будет установить некоторую синхронизацию для связи между потоками.

РЕДАКТИРОВАТЬ: несколько небольших правок для уточненияточки.Извините, если это сбивает с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...