[prev in list] [next in list] [prev in thread] [next in thread]
List: jakarta-commons-dev
Subject: [jira] [Created] (LANG-993) Add zero copy write methods to StrBuilder
From: "Mikhail Mazursky (JIRA)" <jira () apache ! org>
Date: 2014-03-31 15:03:23
Message-ID: JIRA.12705674.1396278176090.36575.1396278203200 () arcas
[Download RAW message or body]
Mikhail Mazursky created LANG-993:
-------------------------------------
Summary: 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
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)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic