そのため、ファイル データを を受け取る API にフィードしていますReader
。進行状況を報告する方法が必要です。
FilterInputStream
をラップしFileInputStream
、読み取ったバイト数とファイルの合計サイズを追跡し、一部のupdate()
進行状況を報告するために何らかのイベントを発生させる (または何らかのメソッドを呼び出す)実装を作成するのは簡単なようです。
(あるいは、読み取った絶対バイト数を報告し、他の誰かが計算を行うこともできます。他のストリーミング状況では、より一般的に役立つかもしれません。)
私はこれを以前に見たことがあり、以前に行ったことがあるかもしれませんが、コードを見つけることができず、怠け者です。誰かがそれを敷設しましたか?または、誰かがより良いアプローチを提案できますか?
1年(と少し)後…
以下のAdamskiの回答に基づいて解決策を実装しましたが、うまくいきましたが、数か月使用した後はお勧めしません. 更新が多い場合、不要な進捗イベントの発生/処理は莫大なコストになります。基本的なカウント メカニズムは問題ありませんが、プログレス ポーリングを気にかけている人は、プログレス ポーリングをプッシュするよりもはるかに優れています。
(合計サイズがわかっている場合は、1% を超える変化ごとにイベントを発生させるなどの方法を試すことができますが、実際には問題を起こす価値はありません。多くの場合、そうではありません。)