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
commit def5b298d3d1f6532a674ebb59656b152fe08129 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Thu May 4 15:19:10 2023 -0400 Reuse FilterInputStream --- .../commons/io/input/BoundedInputStream.java | 26 +++++++++---------- .../commons/io/input/ReadAheadInputStream.java | 15 +++++------ .../io/input/WindowsLineEndingInputStream.java | 30 +++++++++++----------- .../io/input/buffer/CircularBufferInputStream.java | 15 +++-------- 4 files changed, 38 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/apache/commons/io/input/BoundedInputStream.java b/src/main/java/org/apache/commons/io/input/BoundedInputStream.java index 39bfa19e..902e6a55 100644 --- a/src/main/java/org/apache/commons/io/input/BoundedInputStream.java +++ b/src/main/java/org/apache/commons/io/input/BoundedInputStream.java @@ -18,6 +18,7 @@ package org.apache.commons.io.input; import static org.apache.commons.io.IOUtils.EOF; +import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -31,10 +32,7 @@ import java.io.InputStream; * * @since 2.0 */ -public class BoundedInputStream extends InputStream { - - /** The wrapped input stream. */ - private final InputStream inputStream; +public class BoundedInputStream extends FilterInputStream { /** The max count of bytes to read. */ private final long maxCount; @@ -68,8 +66,8 @@ public class BoundedInputStream extends InputStream { public BoundedInputStream(final InputStream inputStream, final long maxLength) { // Some badly designed methods - e.g. the servlet API - overload length // such that "-1" means stream finished + super(inputStream); this.maxCount = maxLength; - this.inputStream = inputStream; } /** @@ -81,7 +79,7 @@ public class BoundedInputStream extends InputStream { onMaxLength(maxCount, count); return 0; } - return inputStream.available(); + return in.available(); } /** @@ -93,7 +91,7 @@ public class BoundedInputStream extends InputStream { @Override public void close() throws IOException { if (propagateClose) { - inputStream.close(); + in.close(); } } @@ -140,7 +138,7 @@ public class BoundedInputStream extends InputStream { */ @Override public synchronized void mark(final int readlimit) { - inputStream.mark(readlimit); + in.mark(readlimit); mark = count; } @@ -151,7 +149,7 @@ public class BoundedInputStream extends InputStream { */ @Override public boolean markSupported() { - return inputStream.markSupported(); + return in.markSupported(); } /** @@ -180,7 +178,7 @@ public class BoundedInputStream extends InputStream { onMaxLength(maxCount, count); return EOF; } - final int result = inputStream.read(); + final int result = in.read(); count++; return result; } @@ -215,7 +213,7 @@ public class BoundedInputStream extends InputStream { return EOF; } final long maxRead = maxCount >= 0 ? Math.min(len, maxCount - count) : len; - final int bytesRead = inputStream.read(b, off, (int) maxRead); + final int bytesRead = in.read(b, off, (int) maxRead); if (bytesRead == EOF) { return EOF; @@ -232,7 +230,7 @@ public class BoundedInputStream extends InputStream { */ @Override public synchronized void reset() throws IOException { - inputStream.reset(); + in.reset(); count = mark; } @@ -259,7 +257,7 @@ public class BoundedInputStream extends InputStream { @Override public long skip(final long n) throws IOException { final long toSkip = maxCount >= 0 ? Math.min(n, maxCount - count) : n; - final long skippedBytes = inputStream.skip(toSkip); + final long skippedBytes = in.skip(toSkip); count += skippedBytes; return skippedBytes; } @@ -271,6 +269,6 @@ public class BoundedInputStream extends InputStream { */ @Override public String toString() { - return inputStream.toString(); + return in.toString(); } } diff --git a/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java b/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java index 4f1d5a19..72e06335 100644 --- a/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java +++ b/src/main/java/org/apache/commons/io/input/ReadAheadInputStream.java @@ -17,6 +17,7 @@ import static org.apache.commons.io.IOUtils.EOF; // import javax.annotation.concurrent.GuardedBy; import java.io.EOFException; +import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InterruptedIOException; @@ -42,7 +43,7 @@ import org.apache.commons.io.build.AbstractStreamBuilder; * * @since 2.9.0 */ -public class ReadAheadInputStream extends InputStream { +public class ReadAheadInputStream extends FilterInputStream { /** * Builds a new {@link ReadAheadInputStream} instance. @@ -158,8 +159,6 @@ public class ReadAheadInputStream extends InputStream { // Whether there is a reader waiting for data. private final AtomicBoolean isWaiting = new AtomicBoolean(false); - private final InputStream underlyingInputStream; - private final ExecutorService executorService; private final boolean shutdownExecutorService; @@ -201,11 +200,11 @@ public class ReadAheadInputStream extends InputStream { */ private ReadAheadInputStream(final InputStream inputStream, final int bufferSizeInBytes, final ExecutorService executorService, final boolean shutdownExecutorService) { + super(Objects.requireNonNull(inputStream, "inputStream")); if (bufferSizeInBytes <= 0) { throw new IllegalArgumentException("bufferSizeInBytes should be greater than 0, but the value is " + bufferSizeInBytes); } this.executorService = Objects.requireNonNull(executorService, "executorService"); - this.underlyingInputStream = Objects.requireNonNull(inputStream, "inputStream"); this.shutdownExecutorService = shutdownExecutorService; this.activeBuffer = ByteBuffer.allocate(bufferSizeInBytes); this.readAheadBuffer = ByteBuffer.allocate(bufferSizeInBytes); @@ -262,7 +261,7 @@ public class ReadAheadInputStream extends InputStream { throw iio; } finally { if (isSafeToCloseUnderlyingInputStream) { - underlyingInputStream.close(); + super.close(); } } } @@ -282,7 +281,7 @@ public class ReadAheadInputStream extends InputStream { } if (needToCloseUnderlyingInputStream) { try { - underlyingInputStream.close(); + super.close(); } catch (final IOException ignored) { // TODO Rethrow as UncheckedIOException? } @@ -389,7 +388,7 @@ public class ReadAheadInputStream extends InputStream { // try to fill the read ahead buffer. // if a reader is waiting, possibly return early. do { - read = underlyingInputStream.read(arr, off, len); + read = in.read(arr, off, len); if (read <= 0) { break; } @@ -486,7 +485,7 @@ public class ReadAheadInputStream extends InputStream { activeBuffer.flip(); readAheadBuffer.position(0); readAheadBuffer.flip(); - final long skippedFromInputStream = underlyingInputStream.skip(toSkip); + final long skippedFromInputStream = in.skip(toSkip); readAsync(); return skippedBytes + skippedFromInputStream; } diff --git a/src/main/java/org/apache/commons/io/input/WindowsLineEndingInputStream.java b/src/main/java/org/apache/commons/io/input/WindowsLineEndingInputStream.java index e6ec30fe..bb9b15f3 100644 --- a/src/main/java/org/apache/commons/io/input/WindowsLineEndingInputStream.java +++ b/src/main/java/org/apache/commons/io/input/WindowsLineEndingInputStream.java @@ -30,13 +30,13 @@ import java.io.InputStream; */ public class WindowsLineEndingInputStream extends InputStream { - private boolean slashRSeen; + private boolean atSlashCr; - private boolean slashNSeen; + private boolean atSlashN; private boolean injectSlashN; - private boolean eofSeen; + private boolean atEos; private final InputStream target; @@ -71,13 +71,13 @@ public class WindowsLineEndingInputStream extends InputStream { if (!ensureLineFeedAtEndOfFile) { return EOF; } - if (!slashNSeen && !slashRSeen) { - slashRSeen = true; + if (!atSlashN && !atSlashCr) { + atSlashCr = true; return CR; } - if (!slashNSeen) { - slashRSeen = false; - slashNSeen = true; + if (!atSlashN) { + atSlashCr = false; + atSlashN = true; return LF; } return EOF; @@ -96,16 +96,16 @@ public class WindowsLineEndingInputStream extends InputStream { */ @Override public int read() throws IOException { - if (eofSeen) { + if (atEos) { return eofGame(); } if (injectSlashN) { injectSlashN = false; return LF; } - final boolean prevWasSlashR = slashRSeen; + final boolean prevWasSlashR = atSlashCr; final int target = readWithUpdate(); - if (eofSeen) { + if (atEos) { return eofGame(); } if (target == LF && !prevWasSlashR) { @@ -122,12 +122,12 @@ public class WindowsLineEndingInputStream extends InputStream { */ private int readWithUpdate() throws IOException { final int target = this.target.read(); - eofSeen = target == EOF; - if (eofSeen) { + atEos = target == EOF; + if (atEos) { return target; } - slashRSeen = target == CR; - slashNSeen = target == LF; + atSlashCr = target == CR; + atSlashN = target == LF; return target; } } diff --git a/src/main/java/org/apache/commons/io/input/buffer/CircularBufferInputStream.java b/src/main/java/org/apache/commons/io/input/buffer/CircularBufferInputStream.java index 02201b25..8c8f1f10 100644 --- a/src/main/java/org/apache/commons/io/input/buffer/CircularBufferInputStream.java +++ b/src/main/java/org/apache/commons/io/input/buffer/CircularBufferInputStream.java @@ -18,6 +18,7 @@ package org.apache.commons.io.input.buffer; import static org.apache.commons.io.IOUtils.EOF; +import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Objects; @@ -28,10 +29,7 @@ import org.apache.commons.io.IOUtils; * Implements a buffered input stream, which is internally based on a {@link CircularByteBuffer}. Unlike the * {@link java.io.BufferedInputStream}, this one doesn't need to reallocate byte arrays internally. */ -public class CircularBufferInputStream extends InputStream { - - /** What we are streaming, used to fill the internal buffer. */ - protected final InputStream in; +public class CircularBufferInputStream extends FilterInputStream { /** Internal buffer. */ protected final CircularByteBuffer buffer; @@ -59,10 +57,10 @@ public class CircularBufferInputStream extends InputStream { * @param bufferSize The size of the {@link CircularByteBuffer}, which is used internally. */ public CircularBufferInputStream(final InputStream inputStream, final int bufferSize) { + super(Objects.requireNonNull(inputStream, "inputStream")); if (bufferSize <= 0) { throw new IllegalArgumentException("Invalid bufferSize: " + bufferSize); } - this.in = Objects.requireNonNull(inputStream, "inputStream"); this.buffer = new CircularByteBuffer(bufferSize); this.bufferSize = bufferSize; this.eof = false; @@ -70,7 +68,7 @@ public class CircularBufferInputStream extends InputStream { @Override public void close() throws IOException { - in.close(); + super.close(); eof = true; buffer.clear(); } @@ -121,11 +119,6 @@ public class CircularBufferInputStream extends InputStream { return buffer.read() & 0xFF; // return unsigned byte } - @Override - public int read(final byte[] buffer) throws IOException { - return read(buffer, 0, buffer.length); - } - @Override public int read(final byte[] targetBuffer, final int offset, final int length) throws IOException { Objects.requireNonNull(targetBuffer, "targetBuffer");