Add asWriter()
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@230918 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5108fdc8fc
commit
d7210650ff
|
@ -17,6 +17,7 @@ package org.apache.commons.lang.text;
|
||||||
|
|
||||||
import java.io.CharArrayReader;
|
import java.io.CharArrayReader;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.io.Writer;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
@ -1578,6 +1579,26 @@ public class StrBuilder implements Cloneable {
|
||||||
return new CharArrayReader(buffer, 0, size);
|
return new CharArrayReader(buffer, 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Gets this builder as a Writer that can be written to.
|
||||||
|
* <p>
|
||||||
|
* This method allows you to populate the contents of the builder
|
||||||
|
* using any standard method that takes a Writer.
|
||||||
|
* <p>
|
||||||
|
* To use, simply create a <code>StrBuilder</code>,
|
||||||
|
* call <code>asWriter</code>, and populate away. The data is available
|
||||||
|
* at any time using the methods of the <code>StrBuilder</code>.
|
||||||
|
* Note however, that no synchronization occurs, so you must not read
|
||||||
|
* the builder from one thread while writing in another thread.
|
||||||
|
* Note also that close and flush have no effect on the writer.
|
||||||
|
*
|
||||||
|
* @return a writer that populates this builder
|
||||||
|
*/
|
||||||
|
public Writer asWriter() {
|
||||||
|
return new StrBuilderWriter();
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
// /**
|
// /**
|
||||||
// * Gets a String version of the string builder by calling the internal
|
// * Gets a String version of the string builder by calling the internal
|
||||||
|
@ -1666,4 +1687,49 @@ public class StrBuilder implements Cloneable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Inner class to allow StrBuilder to operate as a writer.
|
||||||
|
*/
|
||||||
|
class StrBuilderWriter extends Writer {
|
||||||
|
StrBuilderWriter() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void close() {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void flush() {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void write(int c) {
|
||||||
|
append((char) c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void write(char[] cbuf) {
|
||||||
|
append(cbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void write(char[] cbuf, int off, int len) {
|
||||||
|
append(cbuf, off, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void write(String str) {
|
||||||
|
append(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @inheritdoc */
|
||||||
|
public void write(String str, int off, int len) {
|
||||||
|
append(str, off, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package org.apache.commons.lang.text;
|
package org.apache.commons.lang.text;
|
||||||
|
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.io.Writer;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -1839,4 +1840,38 @@ public class StrBuilderTest extends TestCase {
|
||||||
assertEquals(-1, reader.read(buf));
|
assertEquals(-1, reader.read(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
public void testAsWriter() throws Exception {
|
||||||
|
StrBuilder sb = new StrBuilder ("base");
|
||||||
|
Writer writer = sb.asWriter();
|
||||||
|
|
||||||
|
writer.write('l');
|
||||||
|
assertEquals("basel", sb.toString());
|
||||||
|
|
||||||
|
writer.write(new char[] {'i', 'n'});
|
||||||
|
assertEquals("baselin", sb.toString());
|
||||||
|
|
||||||
|
writer.write(new char[] {'n', 'e', 'r'}, 1, 2);
|
||||||
|
assertEquals("baseliner", sb.toString());
|
||||||
|
|
||||||
|
writer.write(" rout");
|
||||||
|
assertEquals("baseliner rout", sb.toString());
|
||||||
|
|
||||||
|
writer.write("ping that server", 1, 3);
|
||||||
|
assertEquals("baseliner routing", sb.toString());
|
||||||
|
|
||||||
|
writer.flush(); // no effect
|
||||||
|
assertEquals("baseliner routing", sb.toString());
|
||||||
|
|
||||||
|
writer.close(); // no effect
|
||||||
|
assertEquals("baseliner routing", sb.toString());
|
||||||
|
|
||||||
|
writer.write(" hi"); // works after close
|
||||||
|
assertEquals("baseliner routing hi", sb.toString());
|
||||||
|
|
||||||
|
sb.setLength(4); // mix and match
|
||||||
|
writer.write('d');
|
||||||
|
assertEquals("based", sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue