Tom Strijmeers created TEXT-218:
-----------------------------------

             Summary: Add method writeTo(Writer):void to TextStringBuilder
                 Key: TEXT-218
                 URL: https://issues.apache.org/jira/browse/TEXT-218
             Project: Commons Text
          Issue Type: New Feature
    Affects Versions: 1.9
            Reporter: Tom Strijmeers


It would be nice if the {{org.apache.commons.text.TextStringBuilder}} had 
methods to write its internal char buffer to a Writer. The opposite of the 
current {{readFrom(java.io.Reader):int}} and {{readFrom(java.io.Reader, 
int):int}} methods.

The javadoc of {{org.apache.commons.text.TextStringBuilder}} states that 
"subclasses have direct access to character array". But that is only partially 
true in my opinion. The internal char array is private protected and the 
{{getBuffer():char[]}} method is package protected.
Meaning that I could create a subclass but it has to be in the 
{{org.apache.commons.text}} package. And that's something I don't like doing.

So giving the TextStringBuilder to ability to write out its internal buffer is 
a good alternative in my opinion.
{code:java}
    /**
     * Writes all chars from the internal buffer directly to the provided 
{@link java.io.Writer} without making extra copies.
     *
     * @param writer Writer to write
     * @throws IOException if an I/O error occurs.
     */
    public void writeTo(Writer writer) throws IOException {
        if(length() == 0) {
            return;
        }
        writer.write(getBuffer(), 0, length());
    }

    /**
     * Writes a portion of the chars from the internal buffer directly to the 
provided {@link java.io.Writer} without making extra copies.
     *
     * @param writer Writer to write
     * @param offset Offset from which to start writing characters from the 
internal buffer
     * @param length Number of characters to write
     * @throws IOException                     if an I/O error occurs.
     * @throws StringIndexOutOfBoundsException if any of the following is true:
     *                                         <ul>
     *                                         <li>{@code offset} is 
negative</li>
     *                                         <li>{@code offset} is greater 
than {@code this.length()}</li>
     *                                         <li>{@code length} is 
negative</li>
     *                                         <li>{@code length} is greater 
than {@code this.length()}</li>
     *                                         <li>{@code offset} and {@code 
length} combined is greater than {@code this.length()}</li>
     *                                         </ul>
     */
    public void writeTo(Writer writer, int offset, int length) throws 
IOException {
        if(offset < 0 || offset > length()) {
            throw new StringIndexOutOfBoundsException(offset);
        }
        if(length < 0 || length > length()) {
            throw new StringIndexOutOfBoundsException(length);
        }
        if((offset + length) > length()) {
            throw new StringIndexOutOfBoundsException(length);
        }
        if(length == 0) {
            return;
        }
        writer.write(getBuffer(), offset, length);
    }
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to