Ответ Адамски работает, но есть небольшая ошибка. Переопределенный метод read(byte[] b)
вызывает метод read(byte[] b, int off, int len)
через суперкласс. Таким образом, updateProgress(long numBytesRead)
вызывается дважды для каждого действия чтения, и вы получаете numBytesRead
, который в два раза больше размера файла после того, как весь файл был прочитан.
Не отменяет метод read(byte[] b)
, решает проблему.