You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/08/10 21:07:15 UTC
[commons-io] branch master updated: Use getChars method for String,
StringBuilder and StringBuffer in CharSequenceReader.read(char[], int,
int) (#90)
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 <ro...@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));