String readLine(boolean ignoreLF) throws IOException {
  StringBuffer s=null;
  int startChar;
synchronized (lock) {
    ensureOpen();
    boolean omitLF=ignoreLF || skipLF;
    bufferLoop:     for (; ; ) {
      if (nextChar >= nChars)       fill();
      if (nextChar >= nChars) {
        if (s != null && s.length() > 0)         return s.toString();
 else         return null;
      }
      boolean eol=false;
      char c=0;
      int i;
      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);
    }
  }
}

String readLine ( boolean ignoreLF ) throws IOException { StringBuffer s = null ; int startChar ; synchronized ( lock ) { ensureOpen ( ) ; boolean omitLF = ignoreLF || skipLF ; bufferLoop : for ( ; ; ) { if ( nextChar >= nChars ) fill ( ) ; if ( nextChar >= nChars ) { if ( s != null && s . length ( ) > 0 ) return s . toString ( ) ; else return null ; } boolean eol = false ; char c = 0 ; int i ; 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 ) ; } } }
reads a line of text . a line is considered to be terminated by any one of a line feed ( ' \ n ' ) , a carriage return ( ' \ r ' ) , or a carriage return followed immediately by a linefeed .
