InputStream или Reader для отчетов о проделанной работе
Так что я'м подачи данных файла в API, который принимаетReader
, и я'Мне нравится способ сообщить о прогрессе.
Кажется, что это должно быть просто написатьFilterInputStream
реализация, которая оборачиваетFileInputStream
отслеживает количество прочитанных байтов по сравнению с общим размером файла и запускает какое-либо событие (или вызывает несколькоupdate()
метод), чтобы сообщить о частичном прогрессе.
(В качестве альтернативы он может сообщать об абсолютном количестве прочитанных байтов, а кто-то другой может сделать математику - может быть, в более общем случае, полезен в случае других потоковых ситуаций.)
Я знаю я'Я видел это раньше, и я, возможно, даже делал это раньше, но я могуне могу найти код и ям ленивый. У кого-нибудь есть это? Или кто-то может предложить лучший подход?
Через год (и немного) спустя ...
Я реализовал решение на основе Адамскиs ответ ниже, и это сработало, но после нескольких месяцев использования я бы неЯ не рекомендую это. Когда у вас много обновлений, запуск / обработка ненужных событий прогресса становится огромной ценой. Базовый механизм подсчета хорош, но гораздо лучше иметь того, кто заботится о ходе опроса, а не выдавать его им.
(Если вы знаете общий размер, вы можете попробовать запускать событие только> 1% или что-то еще, но этоНа самом деле не стоит беспокоиться. И часто ты нет.)