Invólucro InputStream ou Reader para relatórios de progresso

Então, eu estou alimentando dados de arquivo para uma API que leva umReadere gostaria de uma maneira de relatar o progresso.

Parece que deveria ser simples escrever umFilterInputStream implementação que envolve oFileInputStream, controla o número de bytes lidos versus o tamanho total do arquivo e dispara algum evento (ou chama algunsupdate() método) para relatar o progresso fracionário.

(Alternativamente, ele poderia reportar bytes absolutos lidos, e outra pessoa poderia fazer as contas - talvez mais geralmente útil no caso de outras situações de streaming.)

Eu sei que já vi isso antes e posso até ter feito isso antes, mas não consigo encontrar o código e sou preguiçoso. Alguém tem isso por aí? Ou alguém pode sugerir uma abordagem melhor?

Um ano (e um pouco) depois ...

Eu implementei uma solução baseada na resposta de Adamski abaixo, e funcionou, mas depois de alguns meses de uso eu não a recomendaria. Quando você tem muitas atualizações, disparar / manipular eventos de progresso desnecessários se torna um grande custo. O mecanismo de contagem básico é bom, mas é muito melhor ter quem se importe com a pesquisa de progresso, em vez de empurrá-lo para eles.

(Se você souber o tamanho total, você pode tentar apenas disparar um evento a cada 1% de mudança ou qualquer outra coisa, mas isso não vale a pena. E, muitas vezes, você não o faz.)

questionAnswers(5)

yourAnswerToTheQuestion