code: public void mark(int readAheadLimit) throws IOException {
          if (readAheadLimit < 0) {
              throw new IllegalArgumentException("Read-ahead limit < 0");
          }
          synchronized (lock) {
              ensureOpen();
              this.readAheadLimit = readAheadLimit;
              markedChar = nextChar;
              markedSkipLF = skipLF;
          }
      }
docs: Marks the present position in the stream.  Subsequent calls to reset()
  will attempt to reposition the stream to this point.
  
  @param readAheadLimit   Limit on the number of characters that may be
  read while still preserving the mark. An attempt
  to reset the stream after reading characters
  up to this limit or beyond may fail.
  A limit value larger than the size of the input
  buffer will cause a new buffer to be allocated
  whose size is no smaller than limit.
  Therefore large values should be used with care.
  
  @exception  IllegalArgumentException  If {@code readAheadLimit < 0}
  @exception  IOException  If an I/O error occurs