On Sun, 30 Mar 2025 12:34:06 GMT, Markus KARG <d...@openjdk.org> wrote:
>> This Pull Request proposes an implementation for >> [JDK-8343110](https://bugs.openjdk.org/browse/JDK-8343110): Adding the new >> method `public void getChars(int srcBegin, int srcEnd, char[] dst, int >> dstBegin)` to the `CharSequence` interface, providing a **bulk-read** >> facility including a default implementation iterating over `charAt(int)`. >> >> In addition, this Pull Request proposes to replace the implementation of >> `Reader.of(CharSequence).read(char[] cbuf, int off, int len)` to invoke >> `CharSequence.getChars(next, next + n, cbuf, off)` instead of utilizing >> pattern matching for switch. Also, this PR proposes to implement >> `CharBuffer.getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)` as >> an alias for `CharBuffer.get(srcBegin, dst, dstBegin, srcEnd - srcBegin)`. >> >> To ensure quality... >> * ...the method signature and JavaDocs are adapted from >> `AbstractStringBuilder.getChars(...)`. >> * ...this PR relies upon the existing tests for `Reader.of(CharSequence)`, >> as these provide sufficient coverage of all changes introduced by this PR. > > Markus KARG has updated the pull request incrementally with one additional > commit since the last revision: > > Applied changes requested by Chen: 'We might need to specify the IOOBE > behavior - when an IOOBE is thrown, some characters may be already > transferred (this is important for concurrent char sequences)' src/java.base/share/classes/java/lang/CharSequence.java line 338: > 336: * Concurrent truncation of this character sequence can throw > 337: * {@code IndexOutOfBoundsException}. In this case, some characters, > but not > 338: * all, may be already transferred. Though its been absent for decades, it might be worthwhile to include a class level warning that the implementations of the interface are not known or required to be thread safe and if used concurrently by multiple threads the behavior is unpredictable. I'd be more circumspect than trying to specify the only aberrant behavior is IndexOutOfBounds. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/21730#discussion_r2045454429