code: @Override
  	public long skip(long ns) throws IOException
  	{
  		synchronized (lock)
  		{
  			ensureOpen();
  			if (next >= length())
  				return 0;
  			// Bound skip by beginning and end of the source
  			long n = Math.min(length() - next, ns);
  			n = Math.max(-next, n);
  			next += n;
  			return n;
  		}
  	}
docs: Skips the specified number of characters in the stream. Returns the number of characters that were skipped.
  <p/>
  <p/>
  The <code>ns</code> parameter may be negative, even though the <code>skip</code> method of the {@link Reader} superclass
  throws an exception in this case. Negative values of <code>ns</code> cause the stream to skip backwards. Negative return
  values indicate a skip backwards. It is not possible to skip backwards past the beginning of the string.
  <p/>
  <p/>
  If the entire string has been read or skipped, then this method has no effect and always returns 0.
  
  @throws IOException
  If an I/O error occurs