This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push: new c126bdd Use getChars method for String, StringBuilder and StringBuffer in CharSequenceReader.read(char[], int, int) (#90) c126bdd is described below commit c126bdd5161a103cdd4718552d92e2b9153df70b Author: Rob Spoor <robti...@users.noreply.github.com> AuthorDate: Sat Aug 10 23:07:10 2019 +0200 Use getChars method for String, StringBuilder and StringBuffer in CharSequenceReader.read(char[], int, int) (#90) --- .../commons/io/input/CharSequenceReader.java | 20 ++++++++++++++ .../commons/io/input/CharSequenceReaderTest.java | 31 +++++++++++++++++++--- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/commons/io/input/CharSequenceReader.java b/src/main/java/org/apache/commons/io/input/CharSequenceReader.java index ea3bb28..36a38ed 100644 --- a/src/main/java/org/apache/commons/io/input/CharSequenceReader.java +++ b/src/main/java/org/apache/commons/io/input/CharSequenceReader.java @@ -109,6 +109,26 @@ public class CharSequenceReader extends Reader implements Serializable { throw new IndexOutOfBoundsException("Array Size=" + array.length + ", offset=" + offset + ", length=" + length); } + + if (charSequence instanceof String) { + int count = Math.min(length, charSequence.length() - idx); + ((String) charSequence).getChars(idx, idx + count, array, offset); + idx += count; + return count; + } + if (charSequence instanceof StringBuilder) { + int count = Math.min(length, charSequence.length() - idx); + ((StringBuilder) charSequence).getChars(idx, idx + count, array, offset); + idx += count; + return count; + } + if (charSequence instanceof StringBuffer) { + int count = Math.min(length, charSequence.length() - idx); + ((StringBuffer) charSequence).getChars(idx, idx + count, array, offset); + idx += count; + return count; + } + int count = 0; for (int i = 0; i < length; i++) { final int c = read(); diff --git a/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java b/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java index d306293..a245a9b 100644 --- a/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java +++ b/src/test/java/org/apache/commons/io/input/CharSequenceReaderTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.Reader; +import java.nio.CharBuffer; import org.junit.Test; @@ -78,7 +79,15 @@ public class CharSequenceReaderTest { @Test public void testRead() throws IOException { - try (final Reader reader = new CharSequenceReader("Foo")) { + final String value = "Foo"; + testRead(value); + testRead(new StringBuilder(value)); + testRead(new StringBuffer(value)); + testRead(CharBuffer.wrap(value)); + } + + private void testRead(final CharSequence charSequence) throws IOException { + try (final Reader reader = new CharSequenceReader(charSequence)) { assertEquals('F', reader.read()); assertEquals('o', reader.read()); assertEquals('o', reader.read()); @@ -89,7 +98,15 @@ public class CharSequenceReaderTest { @Test public void testReadCharArray() throws IOException { - try (final Reader reader = new CharSequenceReader("FooBar")) { + final String value = "FooBar"; + testReadCharArray(value); + testReadCharArray(new StringBuilder(value)); + testReadCharArray(new StringBuffer(value)); + testReadCharArray(CharBuffer.wrap(value)); + } + + private void testReadCharArray(final CharSequence charSequence) throws IOException { + try (final Reader reader = new CharSequenceReader(charSequence)) { char[] chars = new char[2]; assertEquals(2, reader.read(chars)); checkArray(new char[] { 'F', 'o' }, chars); @@ -105,8 +122,16 @@ public class CharSequenceReaderTest { @Test public void testReadCharArrayPortion() throws IOException { + final String value = "FooBar"; + testReadCharArrayPortion(value); + testReadCharArrayPortion(new StringBuilder(value)); + testReadCharArrayPortion(new StringBuffer(value)); + testReadCharArrayPortion(CharBuffer.wrap(value)); + } + + private void testReadCharArrayPortion(final CharSequence charSequence) throws IOException { final char[] chars = new char[10]; - try (final Reader reader = new CharSequenceReader("FooBar")) { + try (final Reader reader = new CharSequenceReader(charSequence)) { assertEquals(3, reader.read(chars, 3, 3)); checkArray(new char[] { NONE, NONE, NONE, 'F', 'o', 'o' }, chars); assertEquals(3, reader.read(chars, 0, 3));