On Wed, 26 Aug 2026 07:43:04 GMT, Alan Bateman <[email protected]> wrote:

>> Alan, I am perfectly fine with your proposal and adopted it into the PR (all 
>> our additional tests run fine with that). In fact, this is what I originally 
>> started with, but then Roger's comment about the bytes in the decoder pushed 
>> me a bit too far in the slow-path-direction... 😉  
>> 
>> An AI-driven global static search on Github has proven your claim: While 
>> there is a massive use of `InputStreamReader::readAllAsString`, *almost 
>> every* code location is calling it without any prior `read()` operation; 
>> "Almost everybody" is bulk-slurping the whole stream *always*. Hence, it 
>> makes not really much sense to further spend time with fixing the slow path. 
>> 👍 
>> 
>> Having said that, I wonder why you're going with an *extra* `try...()` 
>> method, instead of simply implementing `StreamingDecoder::readAllAsString()` 
>> *directly*? 🤔 
>> 
>> public String readAllAsString() throws IOException {
>>     synchronized (lock) {
>>         ensureOpen();
>>         if (in != null && decoderFromCharset && !readCalled) {
>>             return new String(in.readAllBytes(), cs);
>>         }
>>     }
>>     return super.readAllAsString();
>> }
>
>> An AI-driven global static search on Github has proven your claim: While 
>> there is a massive use of `InputStreamReader::readAllAsString`, _almost 
>> every_ code location is calling it without any prior `read()` operation; 
>> "Almost everybody" is bulk-slurping the whole stream _always_. Hence, it 
>> makes not really much sense to further spend time with fixing the slow path. 
>> 👍
> 
> Good, and this avoids duplicate stream coding logic.
> 
> On whether stream decoder gets a readAllAsString or tryReadAllAsString may 
> not matter. The above comment/suggestion was conservative, only because there 
> can sometimes be surprises when sub-classing and delegation are in the same 
> room. It needs the implementation in the delegate to be as "leafy" as 
> possible.

Agreed. So where to go from here?

* Keep the current PR as-is, or simplify implementation to less conservative 
but slightly shorter alternative?
  ```java
  @Override
  public String readAllAsString() throws IOException {
      return sd.readAllAsString();
  }
  ```
  ```java
  @Override
  public String readAllAsString() throws IOException {
      synchronized (lock) {
          ensureOpen();
          if (in != null && decoderFromCharset && !readCalled) {
              return new String(in.readAllBytes(), cs);
          }
          return super.readAllAsString();
      }
  }
  ```

* Keep the current PR as-is, or removing some of the new tests?

* Whom to ask as second reviewer, as nobody responded so far?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/32264#discussion_r3863216872

Reply via email to