Если вы хотите что-то элегантное, вы можете легко реализовать ObservableInputStream
, который принимает Listener
, который получает предупреждение о доступности данных, но вам придется реализовать его с внутренним потоком, который периодически проверяет данные и вызывает слушателя вcase.
Подумайте о том, что потоки не должны использоваться в качестве объекта, отправляющего небольшие пакеты, а представляют собой непрерывный поток байтов, поэтому этот подход будет работать только в том случае, если данные, которые передаются на входПоток фактически не прибывает слишком часто (иначе это продолжало бы вызывать слушателя ad libitum).Кроме того, вам придется позаботиться о согласованности, если данные поступают, когда что-то уже доступно, и слушатель получает предупреждение, тогда что-то может занять все байты (которые вы должны поместить во временный буфер), но если есть еще данные, которые только что поступили, вы должнырешить, как обрабатывать (дать его вместе с буфером, поместить в буфер и снова вызвать слушателя и т. д.)