RFR: 8354724: BufferedReader readAllLines and readString methods [v5]
Shaojin Wen
swen at openjdk.org
Fri Apr 18 07:01:45 UTC 2025
On Fri, 18 Apr 2025 02:49:43 GMT, Chen Liang <liach at openjdk.org> wrote:
>> `Reader` by specification works on `char`, so I think this is fine. Even if a StringBuilder is UTF16, it still has to check for all-Latin1 characters at the time of string creation, so not really an overhead elimination.
>
> Seems you want to make the `result` StringBuilder fully expanded (maybeLatin1 = true, coder = UTF16) initially, so we just compress the whole builder with a vectorized intrinsic instead of char-by-char loop in `append`. Makes sense.
public static String readString() throws IOException {
char[] chars = new char[TRANSFER_BUFFER_SIZE];
int n;
int off = 0;
int rest = chars.length;
while ((n = read(chars, off, rest)) != -1) {
off += n;
if (n == rest) {
chars = Arrays.copyOf(chars, chars.length * 2);
}
rest = chars.length - off;
}
return new String(chars, 0, off);
}
Maybe this version is better, it directly expands the capacity on char[] without using StringBuilder, has good performance, and does not need to add new methods.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24728#discussion_r2050182416
More information about the core-libs-dev
mailing list