RFC: 8309726: Reader::readString

Aleksei Ivanov alexey.ivanov at oracle.com
Wed Oct 11 17:13:40 UTC 2023


Hi Markus,

I see. I didn't know there was a feature which automatically sends 
emails about submitted enhancements. It's the first time I see such an 
email.

You changed the component from client-libs to core-libs in JDK-8309726, 
which is correct, but the email had already been sent.

-- 
Regards,
Alexey

On 08/10/2023 14:14, Markus Karg wrote:
>
> Aleksei,
>
> thank you for reposting to the "right" mailing list, and everybody 
> thank you for contribution to this discussion, but please note that it 
> was *not me* who posted to the "wrong" list: In fact, I just opened 
> this issue https://bugs.openjdk.org/browse/JDK-8309726, and it was 
> *the OpenJDK infrastructure* which in turn posted to the "wrong" list. 
> I am not aware who is in charge to fix this, but *I* cannot change 
> this behvior. Maybe the one in charge is reading this and can fix it?
>
> Thanks
>
> -Markus
>
> *Von:*Aleksei Ivanov [mailto:alexey.ivanov at oracle.com]
> *Gesendet:* Donnerstag, 5. Oktober 2023 14:16
> *An:* Markus Karg; core-libs
> *Cc:* client-libs-dev at openjdk.org
> *Betreff:* Re: RFC: 8309726: Reader::readString
>
> Hi Markus,
>
> You posted it to the wrong list, it belongs on core-libs-dev.
>
> -- 
> Regards,
> Alexey
>
> On 10/06/2023 12:35, Markus Karg wrote:
>
>     By analyzing several existing applications I noticed that many of
>     them need to read a String from an input source (be it an input
>     stream or a reader), and there are a lot of solutions applied
>     which all are more or less suboptimal:
>
>     * Files.readString(Path) - Fast, convenient, uses
>     JLA.newStringNoRepl, only works with files (not with sockets or
>     other sources).
>     * new String(inputStream.readAllBytes()) - Fast, complex, enforces
>     dealing with an array in user code, cannot use JLA.newStringNoRepl.
>     * bufferedReader.lines().collect(StringBuilder::new,
>     StringBuilder::append, StringBuilder::append).toString(); -
>     Complex, enforces dealing with a stream in user code, doesn't use
>     JLA.newStringNoRepl.
>     * reader.transferTo(stringWriter); stringWriter.toString(); -
>     Medium convient, medium performance, synchronized as it relies on
>     StringBuffer instead of StringBuilder.
>     * Custom loop using char[] of various default sizes (some 8k, some
>     16k, some configurable) - Slow, complex, doesn't use
>     JLA.newStringNoRepl.
>     * etc.
>
>     Checking back with the particular authors of these applications I
>     noticed that what they all miss is (a) guidance which solution is
>     "best" (mostly thinking in speed, but also in reduced GC stress
>     and memory consumption), (b) something convenient like
>     Files.readString() but working with any reader implementation, not
>     just with files.
>
>     I think we can do better, hence I'd like to propose the
>     introduction of a new Reader::readString method. The benefits are:
>     * Guidance. The introduction of this method is a clear signal to
>     all application programmers to use *this* one by default.
>     * Convenience. It couldn't be any easier for the caller.
>     * Performance. OpenJDK committers can optimize it for both,
>     convenience, speed, reduced GC stress, and memory consumption, at
>     the very same time.
>     * Optimizable. Each Reader implementation can choose an algorithm
>     fitting best its own needs, while java.io.Reader itself provides a
>     convenient default implementation based on a loop over this.read().
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20231011/f11a368a/attachment.htm>


More information about the core-libs-dev mailing list