Por lo tanto, estoy alimentando datos de archivo a una API que toma Reader
, y me gustaría una forma de informar el progreso.Contenedor InputStream o Reader para informe de progreso
Parece que debe ser sencillo para escribir una aplicación FilterInputStream
que envuelve el FileInputStream
, no pierde de vista el número de bytes leídos vs el tamaño total del archivo, y dispara un evento (o, llama a algunos update()
método) que informe progreso fraccionario.
(Alternativamente, podría reportar bytes leídos absolutos, y alguien más podría hacer los cálculos. - quizás más generalmente útil en el caso de otras situaciones de streaming)
Sé que he visto esto antes y lo Puede que incluso lo haya hecho antes, pero no puedo encontrar el código y soy flojo. ¿Alguien lo tiene por ahí? ¿O alguien puede sugerir un mejor enfoque?
durante un año (y un poco) más tarde ...
que implementa una solución basada en la respuesta de Adamski a continuación, y funcionó, pero después de algunos meses de uso no se lo recomendaría . Cuando tiene muchas actualizaciones, disparar/manejar eventos de progreso innecesarios se convierte en un gran costo. El mecanismo de conteo básico está bien, pero es mucho mejor tener a quien le importe el sondeo de progreso, en lugar de presionarlo.
(Si conoce el tamaño total, se puede tratar solamente disparando un evento cada> cambio de un 1% o lo que sea, pero no es realmente vale la pena. Y, a menudo, no lo hace.)
No está mal. Probablemente habría olvidado 'skip()'. :) –
@David: para ser sincero, la implementación del salto significó la introducción de moldes desagradables (int), así que si sabes que no lo necesitas, arrojaré una excepción UnsupportedOperationException también aquí. – Adamski
También debe verificar que 'super.read()' no arroje un resultado negativo (final de datos). – PhoneixS