Index: BufferedReader.java =================================================================== --- BufferedReader.java (revision 415302) +++ BufferedReader.java (working copy) @@ -307,12 +307,13 @@ * error occurs. */ + private StringBuilder result = new StringBuilder(80); + public String readLine() throws IOException { synchronized (lock) { + result.setLength(0); if (isOpen()) { char eol = '\0'; - StringBuilder result = new StringBuilder(80); - /* Typical Line Length */ while (true) { /* Are there buffered characters available? */ @@ -329,22 +330,22 @@ if (eol == '\0' && (buf[charPos] == '\n' || buf[charPos] == '\r')) { eol = buf[charPos]; - } else if (eol == '\r' && (buf[charPos] == '\n')) { + continue; + } + if (eol == '\r' && (buf[charPos] == '\n')) { if (charPos > pos) result.append(buf, pos, charPos - pos - 1); pos = charPos + 1; return result.toString(); - } else if (eol != '\0') { + } + if (eol != '\0') { if (charPos > pos) result.append(buf, pos, charPos - pos - 1); pos = charPos; return result.toString(); } } - if (eol != '\0') // eol could only be last character. - result.append(buf, pos, count - pos - 1); - else - result.append(buf, pos, count - pos); + result.append(buf, pos, (eol != '\0') ? count - pos - 1 : count - pos); pos = count; } } Index: LineNumberReader.java =================================================================== --- LineNumberReader.java (revision 415302) +++ LineNumberReader.java (working copy) @@ -182,10 +182,13 @@ * If the LineNumberReader is already closed or some other IO * error occurs. */ + private StringBuilder result = new StringBuilder(80); + public String readLine() throws IOException { synchronized (lock) { /* Typical Line Length */ - StringBuilder result = new StringBuilder(80); + result.setLength(0); + while (true) { int character = read(); if (character == -1)