commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benedikt Ritter (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LANG-993) Add zero copy write methods to StrBuilder
Date Fri, 11 Apr 2014 13:45:17 GMT

    [ https://issues.apache.org/jira/browse/LANG-993?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13966490#comment-13966490
] 

Benedikt Ritter commented on LANG-993:
--------------------------------------

Hello Mikhail,

how about just adding:

{code:java}
public void writeTo(Appendable appendable) {
   appendable.append(CharBuffer.wrap(buffer));
}
{code}

> Add zero copy write methods to StrBuilder
> -----------------------------------------
>
>                 Key: LANG-993
>                 URL: https://issues.apache.org/jira/browse/LANG-993
>             Project: Commons Lang
>          Issue Type: Improvement
>          Components: lang.text.*
>    Affects Versions: 3.3.1
>            Reporter: Mikhail Mazursky
>             Fix For: Review Patch, Discussion
>
>         Attachments: LANG-993.patch
>
>
> Currently I have the following usecase:
> {code}
> StrBuilder builder = new StrBuilder();
> // add lots of stuff to builder
> // in multiple invocations in several classes
> // writer cannot be used directly
> builder.append(...);
> Writer writer = ....;
> CharStreams.copy(builder.asReader(), writer);
> {code}
> [CharStreams|https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/io/CharStreams.java#177]
is a class from Guava lib that copies data between reader and writer using temporary buffer.
> There is a problem with such approach - two additional copies are performed:
> 1) data is copied from the StrBuilder in chunks into temporary buffer (CharBuffer)
> 2) Writer.append(CharSequence) is called that is usually implemented as write(CharSequence.toString())
- i.e. it makes another copy of data and allocates an additional String object.
> I want to avoid those copies by writing the internal buffer of the StrBuilder directly
to the writer. Also it is potentially more efficient because it performs one I/O call instead
of many.
> So I propose to add the following methods:
> {code}
>     public void writeTo(Writer writer) throws IOException {
>         writer.write(buffer, 0, size);
>     }
>     public void writeTo(StringBuilder builder) {
>         builder.append(buffer, 0, size);
>     }
>     public void writeTo(StringBuffer buffer) {
>         buffer.append(this.buffer, 0, size);
>     }
> {code}
> If there is interest I will provide patch (with JavaDocs and tests).



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message