On Fri, 27 Jun 2025 19:41:01 GMT, Brian Burkhalter <b...@openjdk.org> wrote:
>> Replaces the implementation `readAllCharsAsString().lines().toList()` with >> reading into a temporary `char` array which is then processed to detect line >> terminators and copy non-terminating characters into strings which are added >> to the list. > > Brian Burkhalter has updated the pull request incrementally with one > additional commit since the last revision: > > 8358533: Make no line terminator case clearer seems i was wrong about "consolidate two nested parsing loops" :-) the throughput appears to back to normal with 'find term while loop' fast path . int start = 0; int pos = 0; int limit = 0; boolean skipLF = false; int n; while ((n = read(cb, pos, cb.length - pos)) != -1) { limit = pos + n; while (pos < limit) { if (skipLF) { if (cb[pos] == '\n') { pos++; start++; } skipLF = false; } while (pos < limit) { char c = cb[pos++]; if (c == '\n' || c == '\r') { lines.add(new String(cb, start, pos - 1 - start)); skipLF = (c == '\r'); start = pos; break; } } if (pos == limit) { int len = limit - start; if (len >= cb.length) { // allocate larger buffer and copy chars to beginning char[] tmp = new char[2 * cb.length]; System.arraycopy(cb, start, tmp, 0, len); cb = tmp; } else if (start != 0 && len != 0) { // move fragment to beginning of buffer System.arraycopy(cb, start, cb, 0, len); } pos = limit = len; start = 0; break; } } } // add a string if EOS terminates the last line if (limit > start) lines.add(new String(cb, start, limit - start)); return Collections.unmodifiableList(lines); } ------------- PR Comment: https://git.openjdk.org/jdk/pull/25863#issuecomment-3020286174