RFC: 8356679: Using CharSequence::getChars internally

Roger Riggs roger.riggs at oracle.com
Mon May 12 18:18:20 UTC 2025


Hi Markus,

On the surface, its looks constructive.
I suspect that many of these cases will turn into discussions about the 
right/best/better way to buffer the characters.
The getChars method only helps when extracting to a char array, many of 
the current implementations create strings as the intermediary. The 
advantage of the 1 character at a time technique is not needing a 
(separated allocated) buffer.
Consider taking a few at a time before launching into the whole set.

$.02, Roger

On 5/11/25 2:45 AM, Markus KARG wrote:
> Dear Core Libs Team,
>
> I am hereby requesting comments on JDK-8356679.
>
> I would like to invest some time and set up a PR implementing Chen 
> Liangs's proposal laid out in 
> https://bugs.openjdk.org/browse/JDK-8356679. For your convenience, the 
> text of that JBS is copied below. According to the Developer's Guide I 
> do need to get broad agreement BEFORE filing a PR. Therefore, I kindly 
> ask everybody to briefly show consent, so I may file a PR.
>
> Thanks
> -Markus
>
>
> Copy from https://bugs.openjdk.org/browse/JDK-8356679:
>
> Recently OpenJDK adopted the new method CharSequence::getChars(int, 
> int, char[], int) for inclusion in Java 25. As a bulk reader method, 
> it allows potentially improved efficiency over the previously 
> available char-by-char reader method CharSequence::charAt(int).
>
> Chen Liang suggested on March 23rd on the core-lib-dev mailing list to 
> use the new method within the internal source code of OpenJDK for the 
> implementation of Appendables (see 
> https://mail.openjdk.org/pipermail/core-libs-dev/2025-March/141521.html). 
> The idea behind this is that the implementations might be more 
> efficient then.
>
> A quick analysis of the OpenJDK source code identified (at least) the 
> following classes which could potentially run more efficient when 
> using CharSequence::getChars internally, thanks to bulk reading and / 
> or prevention of internal copies / toString() conversions:
> * java.io.Writer
> * java.io.StringWriter
> * java.io.PrintWriter
> * java.io.BufferedWriter
> * java.io.CharArrayWriter
> * java.io.FileWriter
> * java.io.OutputStreamWriter
> * sun.nio.cs.StreamEncoder
> * java.io.PrintStream
> * java.nio.CharBuffer
>
> In the sense of "eat your own dog food", it makes sense to implement 
> Chen's idea in (at least) those classes. Possibly more classes could 
> get identified when taking a deeper look. Besides the potential 
> efficiency improvements, it would be a good show case for the usage of 
> the new API.
>
> The risk of this change should be low, as test coverage exists, and as 
> the intended changes are solely internal to the implementation. No API 
> will get changed. In some cases the JavaDocs will get slightly adapted 
> where it currently exposes the actual implementation (to not lie in 
> future).
>



More information about the core-libs-dev mailing list