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);

Reply via email to