@Override
 protected synchronized void afterRead(int bytes) {
   if (bytes == -1) {
     report.finishedFile();
   } else {
     report.progress(bytes);
   }
 }
 @Override
 public synchronized long skip(final long length) throws IOException {
   final long skip = super.skip(length);
   report.progress(length);
   return skip;
 }