code: String readLine(boolean ignoreLF) throws IOException {
      StringBuffer s = null;
      int startChar;
  
      synchronized (lock) {
        ensureOpen();
        boolean omitLF = ignoreLF || skipLF;
  
        for (;;) {
  
          if (nextChar >= nChars)
            fill();
          if (nextChar >= nChars) { /* EOF */
            if (s != null && s.length() > 0)
              return s.toString();
            else
              return null;
          }
          boolean eol = false;
          char c = 0;
          int i;
  
          /* Skip a leftover '\n', if necessary */
          if (omitLF && (cb[nextChar] == '\n'))
            nextChar++;
          skipLF = false;
          omitLF = false;
  
          charLoop: for (i = nextChar; i < nChars; i++) {
            c = cb[i];
            if ((c == '\n') || (c == '\r')) {
              eol = true;
              break charLoop;
            }
          }
  
          startChar = nextChar;
          nextChar = i;
  
          if (eol) {
            String str;
            if (s == null) {
              str = new String(cb, startChar, i - startChar);
            } else {
              s.append(cb, startChar, i - startChar);
              str = s.toString();
            }
            nextChar++;
            if (c == '\r') {
              skipLF = true;
            }
            return str;
          }
  
          if (s == null)
            s = new StringBuffer(defaultExpectedLineLength);
          s.append(cb, startChar, i - startChar);
        }
      }
    }
docs: Read line.
  
  @param ignoreLF the ignore LF
  @return the string
  @throws IOException Signals that an I/O exception has occurred.