InputStream ou Lecteur de wrapper pour les rapports sur les progrès

Donc, je suis d'alimentation du fichier de données à une API qui prend un Reader, et je voudrais un moyen de faire rapport des progrès accomplis.

Il semble que cela devrait être simple à écrire un FilterInputStream de mise en œuvre qui enveloppe le FileInputStream, garde la trace du nombre d'octets lus vs la taille totale du fichier, et les feux de certains événements (ou les appels de certains update() méthode) pour signaler les fractions de progrès.

(Sinon, il pourrait faire un rapport absolu octets lus, et quelqu'un d'autre pourrait faire le calcul, peut-être plus généralement utile dans le cas des autres streaming situations).

Je sais que j'ai vu ça avant, et je peux même l'avoir fait avant, mais je ne trouve pas le code et je suis paresseux. Quelqu'un a eu autour de la pose? Ou quelqu'un peut-il suggérer une meilleure approche?


D'un an (et un peu plus tard...

J'ai mis en place une solution basée sur Adamski la réponse ci-dessous, et cela a fonctionné, mais après quelques mois d'utilisation je ne le recommande pas. Lorsque vous avez beaucoup de mises à jour, tir/manipulation inutile des progrès événements devient un coût énorme. Le mécanisme de comptage de base est très bien, mais beaucoup mieux que quiconque se soucie de l'avancement du sondage pour elle, plutôt que de les pousser à eux.

(Si vous savez la taille totale, vous pouvez essayer seulement de déclencher un événement chaque > changement de 1% ou que ce soit, mais ce n'est pas vraiment la peine. Et souvent, vous n'avez pas.)

OriginalL'auteur David Moles | 2009-08-27