On Wed, 14 May 2025 17:25:00 GMT, Markus KARG <d...@openjdk.org> wrote:
>> src/java.base/share/classes/java/io/Reader.java line 403: >> >>> 401: char[] str = new char[TRANSFER_BUFFER_SIZE]; >>> 402: int n; >>> 403: while ((n = read(str)) != -1) { >> >> I'd suggest changing this call to `this.read(str, 0, str.length)` so that >> all concrete implementations in this class call only the abstract three-arg >> read() method. Using `this` is optional but it emphasizes that this is a >> self-call. (It's done in only one other place in this file already.) >> >> Also, the variable name `str` is confusing since this isn't a String. I'd >> suggest `cbuf` instead as that name is used for char arrays elsewhere. > > I think `read(str)` is to be preferred over `read(str, 0, str.length()` as it > allows implementations to provide optimized implementations. What the caller > of the new methods wants to achieve is getting everything in the best > possible way, which is, in the most optimized way. If we go around high-level > methods, we should have a good reason for! All other self-calls to a `read` method are to the three-arg abstract method: $ grep read( src/java.base/share/classes/java/io/Reader.java | grep -v public | grep -v * nread = this.read(cbuf, off, rem); nread = read(cbuf, 0, len); if (read(cb, 0, 1) == -1) return read(cbuf, 0, cbuf.length); while ((nread = read(cbuf, 0, cbuf.length)) != -1) { int nc = read(skipBuffer, 0, (int)Math.min(r, nn)); while ((nRead = read(buffer, 0, TRANSFER_BUFFER_SIZE)) >= 0) { ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24728#discussion_r2089432945