private int realRead(byte[] b, int off, int len) throws IOException {
      int lenToRead = rateHelper.take(len);

      int rd = real.read(b, off, lenToRead);
      if (rd != lenToRead)
         rateHelper.giveBack(lenToRead - rd);
      return rd;
   }
private int realRead(byte[] b, int off, int len) throws IOException {
      int lenToRead = rateHelper.take(len);

      int rd = real.read(b, off, lenToRead);
      if (rd != lenToRead)
         rateHelper.giveBack(lenToRead - rd);
      return rd;
   }
private int realRead ( byte [ ] b , int off , int len ) throws IOException { int lenToRead = rateHelper . take ( len ) ; int rd = real . read ( b , off , lenToRead ) ; if ( rd != lenToRead ) rateHelper . giveBack ( lenToRead - rd ) ; return rd ; }
len <= num
len < = num