Skip to content

Commit 9bf29a7

Browse files
committed
Replace new StringInputStream with existing CharSequenceInputStream
Add CharSequenceInputStream.Builder
1 parent ed61330 commit 9bf29a7

15 files changed

Lines changed: 97 additions & 155 deletions

src/changes/changes.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ The <action> type attribute can be add,update,fix,remove.
5353
Regression in FileUtils.touch() - no longer creates parent directories.
5454
</action>
5555
<!-- ADD -->
56-
<action issue="IO-793" dev="ggregory" type="add" due-to="Gary Gregory, K P">
57-
Add StringInputStream. StringInputStream.java should be in main source folder.
56+
<action dev="ggregory" type="fix" due-to="Gary Gregory">
57+
Add CharSequenceInputStream.Builder.
5858
</action>
59+
<!-- UPDATE -->
5960
</release>
6061
<release version="2.12.0" date="2023-05-13" description="Java 8 required.">
6162
<!-- FIX -->

src/main/java/org/apache/commons/io/input/CharSequenceInputStream.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
import org.apache.commons.io.Charsets;
3434
import org.apache.commons.io.IOUtils;
35+
import org.apache.commons.io.build.AbstractStreamBuilder;
3536

3637
/**
3738
* Implements an {@link InputStream} to read from String, StringBuffer, StringBuilder or CharBuffer.
@@ -43,6 +44,58 @@
4344
*/
4445
public class CharSequenceInputStream extends InputStream {
4546

47+
/**
48+
* Builds a new {@link CharSequenceInputStream} instance.
49+
* <p>
50+
* For example:
51+
* </p>
52+
*
53+
* <pre>{@code
54+
* CharSequenceInputStream s = CharSequenceInputStream.builder()
55+
* .setBufferSize(8192)
56+
* .setCharSequence("String")
57+
* .setCharsetEncoder(Charset.defaultCharset())
58+
* .get()}
59+
* </pre>
60+
* @since 2.13.0
61+
*/
62+
public static class Builder extends AbstractStreamBuilder<CharSequenceInputStream, Builder> {
63+
64+
private CharSequence source;
65+
66+
/**
67+
* Constructs a new instance.
68+
*
69+
* Uses the buffer size, CharSequence, and Charset aspects.
70+
*/
71+
@Override
72+
public CharSequenceInputStream get() {
73+
return new CharSequenceInputStream(source, getCharset(), getBufferSize());
74+
}
75+
76+
/**
77+
* Sets the non-null CharSequence.
78+
*
79+
* @param source The source string, MUST not be null.
80+
* @return this.
81+
*/
82+
public Builder setCharSequence(final CharSequence source) {
83+
this.source = Objects.requireNonNull(source, "source");
84+
return this;
85+
}
86+
87+
}
88+
89+
/**
90+
* Constructs a new {@link Builder}.
91+
*
92+
* @return a new {@link Builder}.
93+
* @since 2.12.0
94+
*/
95+
public static Builder builder() {
96+
return new Builder();
97+
}
98+
4699
private static final int NO_MARK = -1;
47100

48101
private final CharsetEncoder charsetEncoder;
@@ -58,7 +111,9 @@ public class CharSequenceInputStream extends InputStream {
58111
* @param cs the input character sequence.
59112
* @param charset the character set name to use.
60113
* @throws IllegalArgumentException if the buffer is not large enough to hold a complete character.
114+
* @deprecated Use {@link #builder()} and {@link Builder#get()}
61115
*/
116+
@Deprecated
62117
public CharSequenceInputStream(final CharSequence cs, final Charset charset) {
63118
this(cs, charset, IOUtils.DEFAULT_BUFFER_SIZE);
64119
}
@@ -70,7 +125,9 @@ public CharSequenceInputStream(final CharSequence cs, final Charset charset) {
70125
* @param charset the character set name to use, null maps to the default Charset.
71126
* @param bufferSize the buffer size to use.
72127
* @throws IllegalArgumentException if the buffer is not large enough to hold a complete character.
128+
* @deprecated Use {@link #builder()} and {@link Builder#get()}
73129
*/
130+
@Deprecated
74131
public CharSequenceInputStream(final CharSequence cs, final Charset charset, final int bufferSize) {
75132
// @formatter:off
76133
this.charsetEncoder = Charsets.toCharset(charset).newEncoder()
@@ -91,7 +148,9 @@ public CharSequenceInputStream(final CharSequence cs, final Charset charset, fin
91148
* @param cs the input character sequence.
92149
* @param charset the character set name to use.
93150
* @throws IllegalArgumentException if the buffer is not large enough to hold a complete character.
151+
* @deprecated Use {@link #builder()} and {@link Builder#get()}
94152
*/
153+
@Deprecated
95154
public CharSequenceInputStream(final CharSequence cs, final String charset) {
96155
this(cs, charset, IOUtils.DEFAULT_BUFFER_SIZE);
97156
}
@@ -103,7 +162,9 @@ public CharSequenceInputStream(final CharSequence cs, final String charset) {
103162
* @param charset the character set name to use, null maps to the default Charset.
104163
* @param bufferSize the buffer size to use.
105164
* @throws IllegalArgumentException if the buffer is not large enough to hold a complete character.
165+
* @deprecated Use {@link #builder()} and {@link Builder#get()}
106166
*/
167+
@Deprecated
107168
public CharSequenceInputStream(final CharSequence cs, final String charset, final int bufferSize) {
108169
this(cs, Charsets.toCharset(charset), bufferSize);
109170
}

src/main/java/org/apache/commons/io/input/StringInputStream.java

Lines changed: 0 additions & 88 deletions
This file was deleted.

src/test/java/org/apache/commons/io/CopyUtilsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import java.io.Writer;
2828
import java.nio.charset.StandardCharsets;
2929

30-
import org.apache.commons.io.input.StringInputStream;
30+
import org.apache.commons.io.input.CharSequenceInputStream;
3131
import org.apache.commons.io.output.ByteArrayOutputStream;
3232
import org.apache.commons.io.test.TestUtils;
3333
import org.apache.commons.io.test.ThrowOnCloseInputStream;
@@ -101,7 +101,7 @@ public void copy_inputStreamToWriterWithEncoding() throws Exception {
101101
final String inDataStr = "data";
102102
final String charsetName = StandardCharsets.UTF_8.name();
103103
final StringWriter writer = new StringWriter();
104-
CopyUtils.copy(new StringInputStream.Builder().setString(inDataStr).setCharset(charsetName).get(), writer, charsetName);
104+
CopyUtils.copy(new CharSequenceInputStream.Builder().setCharSequence(inDataStr).setCharset(charsetName).get(), writer, charsetName);
105105
assertEquals(inDataStr, writer.toString());
106106
}
107107

src/test/java/org/apache/commons/io/DemuxInputStreamTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import java.util.HashMap;
2626
import java.util.Random;
2727

28+
import org.apache.commons.io.input.CharSequenceInputStream;
2829
import org.apache.commons.io.input.DemuxInputStream;
29-
import org.apache.commons.io.input.StringInputStream;
3030
import org.apache.commons.io.output.ByteArrayOutputStream;
3131
import org.apache.commons.io.output.DemuxOutputStream;
3232
import org.apache.commons.io.test.TestUtils;
@@ -140,7 +140,7 @@ private String getOutput(final String threadName) {
140140
}
141141

142142
private void startReader(final String name, final String data, final DemuxInputStream demux) {
143-
final InputStream input = new StringInputStream.Builder().setString(data).get();
143+
final InputStream input = CharSequenceInputStream.builder().setCharSequence(data).get();
144144
final ReaderThread thread = new ReaderThread(name, input, demux);
145145
threadMap.put(name, thread);
146146
}

src/test/java/org/apache/commons/io/IOUtilsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@
6464

6565
import org.apache.commons.io.function.IOConsumer;
6666
import org.apache.commons.io.input.BrokenInputStream;
67+
import org.apache.commons.io.input.CharSequenceInputStream;
6768
import org.apache.commons.io.input.CircularInputStream;
6869
import org.apache.commons.io.input.NullInputStream;
6970
import org.apache.commons.io.input.NullReader;
70-
import org.apache.commons.io.input.StringInputStream;
7171
import org.apache.commons.io.output.AppendableWriter;
7272
import org.apache.commons.io.output.BrokenOutputStream;
7373
import org.apache.commons.io.output.CountingOutputStream;
@@ -966,7 +966,7 @@ public void testReadFully_InputStream_ByteArray() throws Exception {
966966

967967
@Test
968968
public void testReadFully_InputStream_Offset() throws Exception {
969-
final StringInputStream stream = new StringInputStream.Builder().setString("abcd1234").setCharset(StandardCharsets.UTF_8).get();
969+
final InputStream stream = CharSequenceInputStream.builder().setCharSequence("abcd1234").setCharset(StandardCharsets.UTF_8).get();
970970
final byte[] buffer = "wx00000000".getBytes(StandardCharsets.UTF_8);
971971
IOUtils.readFully(stream, buffer, 2, 8);
972972
assertEquals("wxabcd1234", new String(buffer, 0, buffer.length, StandardCharsets.UTF_8));

src/test/java/org/apache/commons/io/input/BOMInputStreamTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ private InputStream createUtf8Input(final byte[] baseData, final boolean addBOM)
154154

155155
private boolean doesSaxSupportCharacterSet(final String charsetName) throws ParserConfigurationException, SAXException, IOException {
156156
final DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
157-
try (StringInputStream byteStream = new StringInputStream.Builder().setString("<?xml version=\"1.0\" encoding=\"" + charsetName + "\"?><Z/>")
157+
try (InputStream byteStream = CharSequenceInputStream.builder().setCharSequence("<?xml version=\"1.0\" encoding=\"" + charsetName + "\"?><Z/>")
158158
.setCharset(charsetName).get()) {
159159
final InputSource is = new InputSource(byteStream);
160160
is.setEncoding(charsetName);

src/test/java/org/apache/commons/io/input/CharSequenceInputStreamTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ private void testCharsetMismatchInfiniteLoop(final String csName) throws IOExcep
184184
try (InputStream stream = new CharSequenceInputStream(new String(inputChars), charset, 512)) {
185185
IOUtils.toCharArray(stream, charset);
186186
}
187+
try (InputStream stream = CharSequenceInputStream.builder().setCharSequence(new String(inputChars)).setCharset(charset).setBufferSize(512).get()) {
188+
IOUtils.toCharArray(stream, charset);
189+
}
187190
}
188191

189192
@Test
@@ -338,7 +341,11 @@ public void testMarkReset_UTF8() throws Exception {
338341

339342
@Test
340343
public void testMarkSupported() throws Exception {
341-
try (InputStream r = new CharSequenceInputStream("test", UTF_8)) {
344+
try (@SuppressWarnings("deprecation")
345+
InputStream r = new CharSequenceInputStream("test", UTF_8)) {
346+
assertTrue(r.markSupported());
347+
}
348+
try (InputStream r = CharSequenceInputStream.builder().setCharSequence("test").setCharset(UTF_8).get()) {
342349
assertTrue(r.markSupported());
343350
}
344351
}
@@ -349,6 +356,10 @@ public void testNullCharset() throws IOException {
349356
IOUtils.toByteArray(in);
350357
assertEquals(Charset.defaultCharset(), in.getCharsetEncoder().charset());
351358
}
359+
try (CharSequenceInputStream in = CharSequenceInputStream.builder().setCharSequence("test").setCharset((Charset) null).get()) {
360+
IOUtils.toByteArray(in);
361+
assertEquals(Charset.defaultCharset(), in.getCharsetEncoder().charset());
362+
}
352363
}
353364

354365
@Test
@@ -357,6 +368,10 @@ public void testNullCharsetName() throws IOException {
357368
IOUtils.toByteArray(in);
358369
assertEquals(Charset.defaultCharset(), in.getCharsetEncoder().charset());
359370
}
371+
try (CharSequenceInputStream in = CharSequenceInputStream.builder().setCharSequence("test").setCharset((String) null).get()) {
372+
IOUtils.toByteArray(in);
373+
assertEquals(Charset.defaultCharset(), in.getCharsetEncoder().charset());
374+
}
360375
}
361376

362377
private void testReadZero(final String csName) throws Exception {

src/test/java/org/apache/commons/io/input/CountingInputStreamTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class CountingInputStreamTest {
3333
@Test
3434
public void testCounting() throws Exception {
3535
final String text = "A piece of text";
36-
try (CountingInputStream cis = new CountingInputStream(new StringInputStream.Builder().setString(text).get())) {
36+
try (CountingInputStream cis = new CountingInputStream(CharSequenceInputStream.builder().setCharSequence(text).get())) {
3737

3838
// have to declare this larger as we're going to read
3939
// off the end of the stream and input stream seems
@@ -149,7 +149,7 @@ public void testResetting() throws Exception {
149149
@Test
150150
public void testSkipping() throws IOException {
151151
final String text = "Hello World!";
152-
try (CountingInputStream cis = new CountingInputStream(new StringInputStream.Builder().setString(text).get())) {
152+
try (CountingInputStream cis = new CountingInputStream(CharSequenceInputStream.builder().setCharSequence(text).get())) {
153153

154154
assertEquals(6, cis.skip(6));
155155
assertEquals(6, cis.getCount());

src/test/java/org/apache/commons/io/input/StringInputStreamTest.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)