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 e59563dd94b435849a8fdf9270c7aed79d7e58da Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Mon Feb 1 11:30:55 2021 -0500 Add and use IOUtils.byteArray(*). --- src/changes/changes.xml | 3 ++ .../java/org/apache/commons/io/ByteOrderMark.java | 2 +- src/main/java/org/apache/commons/io/CopyUtils.java | 9 ++---- src/main/java/org/apache/commons/io/IOUtils.java | 37 ++++++++++++++++++---- .../io/filefilter/MagicNumberFileFilter.java | 6 ++-- .../commons/io/input/ObservableInputStream.java | 2 +- .../commons/io/input/ReversedLinesFileReader.java | 4 +-- .../java/org/apache/commons/io/input/Tailer.java | 2 +- .../apache/commons/io/input/XmlStreamReader.java | 2 +- .../io/input/buffer/CircularBufferInputStream.java | 2 +- .../io/input/buffer/CircularByteBuffer.java | 2 +- .../io/output/AbstractByteArrayOutputStream.java | 5 +-- .../commons/io/output/WriterOutputStream.java | 2 +- .../io/input/ObservableInputStreamTest.java | 2 +- .../io/input/compatibility/XmlStreamReader.java | 14 ++++---- 15 files changed, 58 insertions(+), 36 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index a773da3..161c914 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -166,6 +166,9 @@ The <action> type attribute can be add,update,fix,remove. <action issue="IO-706" dev="ggregory" type="add" due-to="Gary Gregory"> Add TimetampedObserver. </action> + <action dev="ggregory" type="add" due-to="Gary Gregory"> + Add and use IOUtils.byteArray(*). + </action> <!-- UPDATES --> <action dev="ggregory" type="update" due-to="Dependabot"> Update junit-jupiter from 5.6.2 to 5.7.0 #153. diff --git a/src/main/java/org/apache/commons/io/ByteOrderMark.java b/src/main/java/org/apache/commons/io/ByteOrderMark.java index 8143dd1..62b4c97 100644 --- a/src/main/java/org/apache/commons/io/ByteOrderMark.java +++ b/src/main/java/org/apache/commons/io/ByteOrderMark.java @@ -122,7 +122,7 @@ public class ByteOrderMark implements Serializable { * @return a copy of the BOM's bytes */ public byte[] getBytes() { - final byte[] copy = new byte[bytes.length]; + final byte[] copy = IOUtils.byteArray(bytes.length); for (int i = 0; i < bytes.length; i++) { copy[i] = (byte)bytes[i]; } diff --git a/src/main/java/org/apache/commons/io/CopyUtils.java b/src/main/java/org/apache/commons/io/CopyUtils.java index df42bcb..771bd76 100644 --- a/src/main/java/org/apache/commons/io/CopyUtils.java +++ b/src/main/java/org/apache/commons/io/CopyUtils.java @@ -114,11 +114,6 @@ import java.nio.charset.Charset; public class CopyUtils { /** - * The default size of the buffer. - */ - private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; - - /** * Instances should NOT be constructed in standard programming. */ public CopyUtils() { } @@ -172,7 +167,7 @@ public class CopyUtils { * @throws IOException In case of an I/O problem */ public static int copy(final InputStream input, final OutputStream output) throws IOException { - final byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; + final byte[] buffer = IOUtils.byteArray(); int count = 0; int n = 0; while (EOF != (n = input.read(buffer))) { @@ -197,7 +192,7 @@ public class CopyUtils { final Reader input, final Writer output) throws IOException { - final char[] buffer = new char[DEFAULT_BUFFER_SIZE]; + final char[] buffer = new char[IOUtils.DEFAULT_BUFFER_SIZE]; int count = 0; int n = 0; while (EOF != (n = input.read(buffer))) { diff --git a/src/main/java/org/apache/commons/io/IOUtils.java b/src/main/java/org/apache/commons/io/IOUtils.java index cec444d..9073104 100644 --- a/src/main/java/org/apache/commons/io/IOUtils.java +++ b/src/main/java/org/apache/commons/io/IOUtils.java @@ -172,7 +172,7 @@ public class IOUtils { /** * The default buffer to use for the skip() methods. */ - private static final byte[] SKIP_BYTE_BUFFER = new byte[DEFAULT_BUFFER_SIZE]; + private static final byte[] SKIP_BYTE_BUFFER = byteArray(); // Allocated in the relevant skip method if necessary. /* @@ -316,6 +316,29 @@ public class IOUtils { } /** + * Returns a new byte array of size {@link #DEFAULT_BUFFER_SIZE}. + * + * @return a new byte array of size {@link #DEFAULT_BUFFER_SIZE}. + * @since 2.9.0 + */ + public static byte[] byteArray() { + return byteArray(DEFAULT_BUFFER_SIZE); + } + + /** + * Returns a new byte array of the given size. + * + * TODO Consider guarding or warning against large allocations... + * + * @param size array size. + * @return a new byte array of the given size. + * @since 2.9.0 + */ + public static byte[] byteArray(final int size) { + return new byte[size]; + } + + /** * Closes the given {@link Closeable} as a null-safe operation. * * @param closeable The resource to close, may be null. @@ -754,8 +777,8 @@ public class IOUtils { return false; } - final byte[] array1 = new byte[DEFAULT_BUFFER_SIZE]; - final byte[] array2 = new byte[DEFAULT_BUFFER_SIZE]; + final byte[] array1 = byteArray(); + final byte[] array2 = byteArray(); int pos1; int pos2; int count1; @@ -925,7 +948,7 @@ public class IOUtils { */ public static long copy(final InputStream inputStream, final OutputStream outputStream, final int bufferSize) throws IOException { - return copyLarge(inputStream, outputStream, new byte[bufferSize]); + return copyLarge(inputStream, outputStream, IOUtils.byteArray(bufferSize)); } /** @@ -1243,7 +1266,7 @@ public class IOUtils { */ public static long copyLarge(final InputStream input, final OutputStream output, final long inputOffset, final long length) throws IOException { - return copyLarge(input, output, inputOffset, length, new byte[DEFAULT_BUFFER_SIZE]); + return copyLarge(input, output, inputOffset, length, byteArray()); } /** @@ -1730,7 +1753,7 @@ public class IOUtils { * @since 2.5 */ public static byte[] readFully(final InputStream input, final int length) throws IOException { - final byte[] buffer = new byte[length]; + final byte[] buffer = IOUtils.byteArray(length); readFully(input, buffer, 0, buffer.length); return buffer; } @@ -2317,7 +2340,7 @@ public class IOUtils { return EMPTY_BYTE_ARRAY; } - final byte[] data = new byte[size]; + final byte[] data = IOUtils.byteArray(size); int offset = 0; int read; diff --git a/src/main/java/org/apache/commons/io/filefilter/MagicNumberFileFilter.java b/src/main/java/org/apache/commons/io/filefilter/MagicNumberFileFilter.java index 199bba2..581d77a 100644 --- a/src/main/java/org/apache/commons/io/filefilter/MagicNumberFileFilter.java +++ b/src/main/java/org/apache/commons/io/filefilter/MagicNumberFileFilter.java @@ -29,6 +29,8 @@ import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; +import org.apache.commons.io.IOUtils; + /** * <p> * File filter for matching files containing a "magic number". A magic number @@ -171,7 +173,7 @@ public class MagicNumberFileFilter extends AbstractFileFilter implements throw new IllegalArgumentException("The offset cannot be negative"); } - this.magicNumbers = new byte[magicNumber.length]; + this.magicNumbers = IOUtils.byteArray(magicNumber.length); System.arraycopy(magicNumber, 0, this.magicNumbers, 0, magicNumber.length); this.byteOffset = offset; } @@ -258,7 +260,7 @@ public class MagicNumberFileFilter extends AbstractFileFilter implements if (file != null && file.isFile() && file.canRead()) { try { try (RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r")) { - final byte[] fileBytes = new byte[this.magicNumbers.length]; + final byte[] fileBytes = IOUtils.byteArray(this.magicNumbers.length); randomAccessFile.seek(byteOffset); final int read = randomAccessFile.read(fileBytes); if (read != magicNumbers.length) { diff --git a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java index 7392783..d7d9191 100644 --- a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java +++ b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java @@ -164,7 +164,7 @@ public class ObservableInputStream extends ProxyInputStream { * @throws IOException The underlying {@link InputStream}, or either of the observers has thrown an exception. */ public void consume() throws IOException { - final byte[] buffer = new byte[IOUtils.DEFAULT_BUFFER_SIZE]; + final byte[] buffer = IOUtils.byteArray(); while (read(buffer) != EOF) { // empty } diff --git a/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java b/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java index 7a4ccfc..860e3dd 100644 --- a/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java +++ b/src/main/java/org/apache/commons/io/input/ReversedLinesFileReader.java @@ -90,7 +90,7 @@ public class ReversedLinesFileReader implements Closeable { final int lineLengthBytes = currentLastBytePos + 1; if (lineLengthBytes > 0) { // create left over for next block - leftOver = new byte[lineLengthBytes]; + leftOver = IOUtils.byteArray(lineLengthBytes); System.arraycopy(data, 0, leftOver, 0, lineLengthBytes); } else { leftOver = null; @@ -149,7 +149,7 @@ public class ReversedLinesFileReader implements Closeable { if (lineLengthBytes < 0) { throw new IllegalStateException("Unexpected negative line length=" + lineLengthBytes); } - final byte[] lineData = new byte[lineLengthBytes]; + final byte[] lineData = IOUtils.byteArray(lineLengthBytes); System.arraycopy(data, lineStart, lineData, 0, lineLengthBytes); line = new String(lineData, charset); diff --git a/src/main/java/org/apache/commons/io/input/Tailer.java b/src/main/java/org/apache/commons/io/input/Tailer.java index e3e9124..4d34729 100644 --- a/src/main/java/org/apache/commons/io/input/Tailer.java +++ b/src/main/java/org/apache/commons/io/input/Tailer.java @@ -259,7 +259,7 @@ public class Tailer implements Runnable { this.delayMillis = delayMillis; this.end = end; - this.inbuf = new byte[bufSize]; + this.inbuf = IOUtils.byteArray(bufSize); // Save and prepare the listener this.listener = listener; diff --git a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java index 2e8c714..ab4c31f 100644 --- a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java +++ b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java @@ -186,7 +186,7 @@ public class XmlStreamReader extends Reader { throws IOException { String encoding = null; if (guessedEnc != null) { - final byte[] bytes = new byte[IOUtils.DEFAULT_BUFFER_SIZE]; + final byte[] bytes = IOUtils.byteArray(); inputStream.mark(IOUtils.DEFAULT_BUFFER_SIZE); int offset = 0; int max = IOUtils.DEFAULT_BUFFER_SIZE; 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 65a3221..b6c51ab 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 @@ -78,7 +78,7 @@ public class CircularBufferInputStream extends InputStream { return; } int space = buffer.getSpace(); - final byte[] buf = new byte[space]; + final byte[] buf = IOUtils.byteArray(space); while (space > 0) { final int res = in.read(buf, 0, space); if (res == EOF) { diff --git a/src/main/java/org/apache/commons/io/input/buffer/CircularByteBuffer.java b/src/main/java/org/apache/commons/io/input/buffer/CircularByteBuffer.java index 9fe452e..78998c3 100644 --- a/src/main/java/org/apache/commons/io/input/buffer/CircularByteBuffer.java +++ b/src/main/java/org/apache/commons/io/input/buffer/CircularByteBuffer.java @@ -39,7 +39,7 @@ public class CircularByteBuffer { * @param size the size of buffer to create */ public CircularByteBuffer(final int size) { - buffer = new byte[size]; + buffer = IOUtils.byteArray(size); startOffset = 0; endOffset = 0; currentNumberOfBytes = 0; diff --git a/src/main/java/org/apache/commons/io/output/AbstractByteArrayOutputStream.java b/src/main/java/org/apache/commons/io/output/AbstractByteArrayOutputStream.java index 76f933a..0f982c0 100644 --- a/src/main/java/org/apache/commons/io/output/AbstractByteArrayOutputStream.java +++ b/src/main/java/org/apache/commons/io/output/AbstractByteArrayOutputStream.java @@ -16,6 +16,7 @@ */ package org.apache.commons.io.output; +import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.ClosedInputStream; import java.io.InputStream; @@ -103,7 +104,7 @@ public abstract class AbstractByteArrayOutputStream extends OutputStream { } currentBufferIndex++; - currentBuffer = new byte[newBufferSize]; + currentBuffer = IOUtils.byteArray(newBufferSize); buffers.add(currentBuffer); } } @@ -364,7 +365,7 @@ public abstract class AbstractByteArrayOutputStream extends OutputStream { if (remaining == 0) { return EMPTY_BYTE_ARRAY; } - final byte[] newbuf = new byte[remaining]; + final byte[] newbuf = IOUtils.byteArray(remaining); int pos = 0; for (final byte[] buf : buffers) { final int c = Math.min(buf.length, remaining); diff --git a/src/main/java/org/apache/commons/io/output/WriterOutputStream.java b/src/main/java/org/apache/commons/io/output/WriterOutputStream.java index d216fd4..a0a6476 100644 --- a/src/main/java/org/apache/commons/io/output/WriterOutputStream.java +++ b/src/main/java/org/apache/commons/io/output/WriterOutputStream.java @@ -245,7 +245,7 @@ public class WriterOutputStream extends OutputStream { */ @Override public void write(final int b) throws IOException { - write(new byte[] { (byte)b }, 0, 1); + write(new byte[] {(byte) b}, 0, 1); } /** diff --git a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java index c619163..b7920c8 100644 --- a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java +++ b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java @@ -254,7 +254,7 @@ public class ObservableInputStreamTest { } private void testNotificationCallbacks(final int bufferSize) throws IOException { - final byte[] buffer = new byte[IOUtils.DEFAULT_BUFFER_SIZE]; + final byte[] buffer = IOUtils.byteArray(); final LengthObserver lengthObserver = new LengthObserver(); final MethodCountObserver methodCountObserver = new MethodCountObserver(); try (final ObservableInputStream ois = new ObservableInputStream(new ByteArrayInputStream(buffer), diff --git a/src/test/java/org/apache/commons/io/input/compatibility/XmlStreamReader.java b/src/test/java/org/apache/commons/io/input/compatibility/XmlStreamReader.java index 94d3424..e8d98d3 100644 --- a/src/test/java/org/apache/commons/io/input/compatibility/XmlStreamReader.java +++ b/src/test/java/org/apache/commons/io/input/compatibility/XmlStreamReader.java @@ -68,8 +68,6 @@ import org.apache.commons.io.output.XmlStreamWriter; * @see XmlStreamWriter */ public class XmlStreamReader extends Reader { - private static final int BUFFER_SIZE = IOUtils.DEFAULT_BUFFER_SIZE; - private static final String UTF_8 = "UTF-8"; private static final String US_ASCII = "US-ASCII"; @@ -421,7 +419,7 @@ public class XmlStreamReader extends Reader { private void doRawStream(final InputStream inputStream) throws IOException { - final BufferedInputStream pis = new BufferedInputStream(inputStream, BUFFER_SIZE); + final BufferedInputStream pis = new BufferedInputStream(inputStream, IOUtils.DEFAULT_BUFFER_SIZE); final String bomEnc = getBOMEncoding(pis); final String xmlGuessEnc = getXMLGuessEncoding(pis); final String xmlEnc = getXmlProlog(pis, xmlGuessEnc); @@ -431,7 +429,7 @@ public class XmlStreamReader extends Reader { private void doHttpStream(final InputStream inputStream, final String httpContentType, final boolean lenient) throws IOException { - final BufferedInputStream pis = new BufferedInputStream(inputStream, BUFFER_SIZE); + final BufferedInputStream pis = new BufferedInputStream(inputStream, IOUtils.DEFAULT_BUFFER_SIZE); final String cTMime = getContentTypeMime(httpContentType); final String cTEnc = getContentTypeEncoding(httpContentType); final String bomEnc = getBOMEncoding(pis); @@ -669,14 +667,14 @@ public class XmlStreamReader extends Reader { throws IOException { String encoding = null; if (guessedEnc != null) { - final byte[] bytes = new byte[BUFFER_SIZE]; - is.mark(BUFFER_SIZE); + final byte[] bytes = IOUtils.byteArray(); + is.mark(IOUtils.DEFAULT_BUFFER_SIZE); int offset = 0; - int max = BUFFER_SIZE; + int max = IOUtils.DEFAULT_BUFFER_SIZE; int c = is.read(bytes, offset, max); int firstGT = -1; String xmlProlog = ""; // avoid possible NPE warning (cannot happen; this just silences the warning) - while (c != -1 && firstGT == -1 && offset < BUFFER_SIZE) { + while (c != -1 && firstGT == -1 && offset < IOUtils.DEFAULT_BUFFER_SIZE) { offset += c; max -= c; c = is.read(bytes, offset, max);