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