code: @Override
    public long skip(long n)
      throws IOException
    {
      if (n <= 0) {
        return n;
      }
      
      long skipLen = 0;
      
      while (n > 0) {
        long sublen = Math.min(n, _readLength - _readOffset);
  
        if (sublen > 0) {
          _readOffset += sublen;
  
          skipLen += sublen;
          n -= sublen;
        }
        else {
          if (_source.hasSkip()) {
            _readOffset = _readLength = 0;
            
            long sourceSkipped = _source.skip(n);
  
            if (sourceSkipped <= 0) {
              return skipLen;
            }
            else {
              _position += sourceSkipped;
              skipLen += sourceSkipped;
              
              n -= sourceSkipped;
            }
          }
          else if (! readBuffer()) {
            return skipLen;
          }
        }
      }
      
      return skipLen;
    }
docs: Skips the next <code>n</code> bytes.
  
  @param n bytes to skip.
  
  @return number of bytes skipped.