InputStream или Reader для отчетов о проделанной работе

Так что я'м подачи данных файла в API, который принимаетReader, и я'Мне нравится способ сообщить о прогрессе.

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

(В качестве альтернативы он может сообщать об абсолютном количестве прочитанных байтов, а кто-то другой может сделать математику - может быть, в более общем случае, полезен в случае других потоковых ситуаций.)

Я знаю я'Я видел это раньше, и я, возможно, даже делал это раньше, но я могуне могу найти код и ям ленивый. У кого-нибудь есть это? Или кто-то может предложить лучший подход?

Через год (и немного) спустя ...

Я реализовал решение на основе Адамскиs ответ ниже, и это сработало, но после нескольких месяцев использования я бы неЯ не рекомендую это. Когда у вас много обновлений, запуск / обработка ненужных событий прогресса становится огромной ценой. Базовый механизм подсчета хорош, но гораздо лучше иметь того, кто заботится о ходе опроса, а не выдавать его им.

(Если вы знаете общий размер, вы можете попробовать запускать событие только> 1% или что-то еще, но этоНа самом деле не стоит беспокоиться. И часто ты нет.)

Ответы на вопрос(5)

Ваш ответ на вопрос