On Tue, 8 Oct 2024 12:32:00 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> I would treat this specific scenario as one of the "no concurrent usage" 
>> examples. Note that by this principle, mutable objects like `StringBuilder` 
>> should not override object comparison methods as these states can change, 
>> but they do :(
>
>> The question is: Would that make any sense in the end?
> 
> Consider the example of `StringBuffer`, which is a `CharSequence`. Wouldn't 
> something like the following be a logical use of `Reader.of(CharSequence)`, 
> where you create a `Reader` for the underlying sequence (which is not yet 
> populated) and then keep reading through the `Reader` until the underlying 
> sequence's data is finished?
> 
> 
> final StringBuffer sb = new StringBuffer();
> try (final Reader reader = Reader.of(sb)) {
>     final ContentGenerator cg = new ContentGenerator(sb);
>     Thread.ofPlatform().start(cg);
>     int numRead = 0;
>     while (numRead != -1) {
>         final char[] content = new char[1024];
>         numRead = reader.read(content); // wait for content
>     }
> }
> 
> private class ContentGenerator {
>     final StringBuffer sb;
>     ContentGenerator(StringBuffer sb) {
>         this.sb = sb;
>     }
> 
>     @Override
>     run() {
>         while (true) {
>             String foo = getSomeContent(); // maybe blocking
>             sb.append(foo);
>         }
>     }
> }

>  I cannot image any scenario where such a program would result in useful 
> outcome.

An additional point of reference is the current default implementation of 
CharSequence's `public default IntStream chars()`, which returns an IntStream 
of char values from the sequence and the implementation of which doesn't 
consider the `length()` to be fixed.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21371#discussion_r1791811620

Reply via email to