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 2021/01/16 19:11:28 UTC

[commons-compress] branch master updated: Define and reuse constants.

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-compress.git


The following commit(s) were added to refs/heads/master by this push:
     new 0bdc408  Define and reuse constants.
0bdc408 is described below

commit 0bdc4081822323f582062cbf385ff9fb85ada562
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 16 14:11:23 2021 -0500

    Define and reuse constants.
---
 .../commons/compress/archivers/examples/Archiver.java   |  4 ++--
 .../commons/compress/archivers/sevenz/Archive.java      |  4 ++--
 .../commons/compress/archivers/sevenz/CoderBase.java    |  6 +++---
 .../commons/compress/archivers/sevenz/Folder.java       |  1 +
 .../compress/archivers/sevenz/SevenZArchiveEntry.java   |  1 +
 .../commons/compress/archivers/sevenz/SevenZFile.java   |  9 +++++----
 .../commons/compress/archivers/tar/TarArchiveEntry.java |  8 ++++----
 .../commons/compress/archivers/zip/ExtraFieldUtils.java |  4 +++-
 .../commons/compress/archivers/zip/JarMarker.java       |  7 ++++---
 .../commons/compress/archivers/zip/X7875_NewUnix.java   |  4 +++-
 .../zip/Zip64ExtendedInformationExtraField.java         |  6 +++---
 .../commons/compress/archivers/zip/ZipArchiveEntry.java | 17 ++++++++---------
 .../compress/archivers/zip/ZipArchiveOutputStream.java  |  5 ++---
 .../apache/commons/compress/archivers/zip/ZipFile.java  |  4 ++--
 .../compress/compressors/deflate64/HuffmanDecoder.java  |  3 ++-
 .../org/apache/commons/compress/utils/ByteUtils.java    |  8 ++++++++
 .../compress/utils/SeekableInMemoryByteChannel.java     |  2 +-
 .../compress/archivers/ArchiveStreamFactoryTest.java    |  5 +++--
 .../apache/commons/compress/archivers/TarTestCase.java  |  5 +++--
 .../compress/archivers/sevenz/SevenZNativeHeapTest.java |  3 ++-
 .../compress/archivers/sevenz/SevenZOutputFileTest.java |  5 +++--
 .../commons/compress/archivers/tar/TarUtilsTest.java    |  3 ++-
 .../commons/compress/archivers/zip/BitStreamTest.java   |  5 +++--
 .../compress/archivers/zip/X7875_NewUnixTest.java       |  5 +++--
 .../compress/archivers/zip/ZipArchiveEntryTest.java     |  9 +++++----
 .../archivers/zip/ZipArchiveInputStreamTest.java        |  3 ++-
 .../commons/compress/archivers/zip/ZipFileTest.java     |  7 ++++---
 .../compress/compressors/DetectCompressorTestCase.java  |  5 +++--
 .../AbstractLZ77CompressorInputStreamTest.java          |  5 +++--
 .../apache/commons/compress/utils/ByteUtilsTest.java    |  8 ++++----
 .../utils/ChecksumCalculatingInputStreamTest.java       |  3 +--
 .../org/apache/commons/compress/utils/IOUtilsTest.java  |  2 +-
 .../utils/MultiReadOnlySeekableByteChannelTest.java     |  2 +-
 .../utils/ZipSplitReadOnlySeekableByteChannelTest.java  |  2 +-
 34 files changed, 98 insertions(+), 72 deletions(-)

diff --git a/src/main/java/org/apache/commons/compress/archivers/examples/Archiver.java b/src/main/java/org/apache/commons/compress/archivers/examples/Archiver.java
index 8358753..f94909d 100644
--- a/src/main/java/org/apache/commons/compress/archivers/examples/Archiver.java
+++ b/src/main/java/org/apache/commons/compress/archivers/examples/Archiver.java
@@ -41,6 +41,7 @@ import org.apache.commons.compress.archivers.ArchiveOutputStream;
 import org.apache.commons.compress.archivers.ArchiveStreamFactory;
 import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+import org.apache.commons.compress.utils.IOUtils;
 
 /**
  * Provides a high level API for creating archives.
@@ -52,7 +53,6 @@ public class Archiver {
 
     private static class ArchiverFileVisitor extends SimpleFileVisitor<Path> {
 
-        private static final LinkOption[] EMPTY_LINK_OPTIONS = new LinkOption[0];
         private final ArchiveOutputStream target;
         private final Path directory;
         private final LinkOption[] linkOptions;
@@ -61,7 +61,7 @@ public class Archiver {
             final LinkOption... linkOptions) {
             this.target = target;
             this.directory = directory;
-            this.linkOptions = linkOptions == null ? EMPTY_LINK_OPTIONS : linkOptions.clone();
+            this.linkOptions = linkOptions == null ? IOUtils.EMPTY_LINK_OPTIONS : linkOptions.clone();
         }
 
         @Override
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/Archive.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/Archive.java
index 00ca8b4..7d3d86a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/Archive.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/Archive.java
@@ -29,11 +29,11 @@ class Archive {
     /// CRCs for each packed stream, valid only if that packed stream has one.
     long[] packCrcs;
     /// Properties of solid compression blocks.
-    Folder[] folders = new Folder[0];
+    Folder[] folders = Folder.EMPTY_FOLDER_ARRAY;
     /// Temporary properties for non-empty files (subsumed into the files array later).
     SubStreamsInfo subStreamsInfo;
     /// The files and directories in the archive.
-    SevenZArchiveEntry[] files = new SevenZArchiveEntry[0];
+    SevenZArchiveEntry[] files = SevenZArchiveEntry.EMPTY_SEVEN_Z_ARCHIVE_ENTRY_ARRAY;
     /// Mapping between folders, files and streams.
     StreamMap streamMap;
 
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/CoderBase.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/CoderBase.java
index d4ea715..fa3c5f4 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/CoderBase.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/CoderBase.java
@@ -21,13 +21,13 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
+import org.apache.commons.compress.utils.ByteUtils;
+
 /**
  * Base Codec class.
  */
 abstract class CoderBase {
     private final Class<?>[] acceptableOptions;
-    private static final byte[] NONE = new byte[0];
-
     /**
      * @param acceptableOptions types that can be used as options for this codec.
      */
@@ -51,7 +51,7 @@ abstract class CoderBase {
      * @return property-bytes to write in a Folder block
      */
     byte[] getOptionsAsProperties(final Object options) throws IOException {
-        return NONE;
+        return ByteUtils.EMPTY_BYTE_ARRAY;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/Folder.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/Folder.java
index c0f994c..dff9eea 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/Folder.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/Folder.java
@@ -44,6 +44,7 @@ class Folder {
     /// output streams and the number of non-empty files in this
     /// folder.
     int numUnpackSubStreams;
+    static final Folder[] EMPTY_FOLDER_ARRAY = new Folder[0];
 
     /**
      * Sorts Coders using bind pairs.
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntry.java
index 620fb37..a899329 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntry.java
@@ -50,6 +50,7 @@ public class SevenZArchiveEntry implements ArchiveEntry {
     private long crc, compressedCrc;
     private long size, compressedSize;
     private Iterable<? extends SevenZMethodConfiguration> contentMethods;
+    static final SevenZArchiveEntry[] EMPTY_SEVEN_Z_ARCHIVE_ENTRY_ARRAY = new SevenZArchiveEntry[0];
 
     public SevenZArchiveEntry() {
     }
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
index 5cdf12f..666caab 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
@@ -44,6 +44,7 @@ import java.util.Map;
 import java.util.zip.CRC32;
 
 import org.apache.commons.compress.utils.BoundedInputStream;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.CRC32VerifyingInputStream;
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.compress.utils.InputStreamStatistics;
@@ -641,7 +642,7 @@ public class SevenZFile implements Closeable {
             nid = getUnsignedByte(header);
         } else {
             // archive without unpack/coders info
-            archive.folders = new Folder[0];
+            archive.folders = Folder.EMPTY_FOLDER_ARRAY;
         }
 
         if (nid == NID.kSubStreamsInfo) {
@@ -1111,7 +1112,7 @@ public class SevenZFile implements Closeable {
                 entries.add(e);
             }
         }
-        archive.files = entries.toArray(new SevenZArchiveEntry[0]);
+        archive.files = entries.toArray(SevenZArchiveEntry.EMPTY_SEVEN_Z_ARCHIVE_ENTRY_ARRAY);
         calculateStreamMap(archive);
     }
 
@@ -1194,7 +1195,7 @@ public class SevenZFile implements Closeable {
         if (folderIndex < 0) {
             deferredBlockStreams.clear();
             // TODO: previously it'd return an empty stream?
-            // new BoundedInputStream(new ByteArrayInputStream(new byte[0]), 0);
+            // new BoundedInputStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY), 0);
             return;
         }
         final SevenZArchiveEntry file = archive.files[entryIndex];
@@ -1425,7 +1426,7 @@ public class SevenZFile implements Closeable {
 
     private InputStream getCurrentStream() throws IOException {
         if (archive.files[currentEntryIndex].getSize() == 0) {
-            return new ByteArrayInputStream(new byte[0]);
+            return new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY);
         }
         if (deferredBlockStreams.isEmpty()) {
             throw new IllegalStateException("No current 7z entry (call getNextEntry() first).");
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
index 54592c3..5417b13 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveEntry.java
@@ -160,7 +160,7 @@ import org.apache.commons.compress.utils.IOUtils;
  */
 
 public class TarArchiveEntry implements ArchiveEntry, TarConstants, EntryStreamOffsets {
-    private static final TarArchiveEntry[] EMPTY_TAR_ARCHIVE_ENTRIES = new TarArchiveEntry[0];
+    private static final TarArchiveEntry[] EMPTY_TAR_ARCHIVE_ENTRY_ARRAY = new TarArchiveEntry[0];
 
     /**
      * Value used to indicate unknown mode, user/groupids, device numbers and modTime when parsing a file in lenient
@@ -1385,7 +1385,7 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants, EntryStreamO
      */
     public TarArchiveEntry[] getDirectoryEntries() {
         if (file == null || !isDirectory()) {
-            return EMPTY_TAR_ARCHIVE_ENTRIES;
+            return EMPTY_TAR_ARCHIVE_ENTRY_ARRAY;
         }
 
         final List<TarArchiveEntry> entries = new ArrayList<>();
@@ -1396,9 +1396,9 @@ public class TarArchiveEntry implements ArchiveEntry, TarConstants, EntryStreamO
                 entries.add(new TarArchiveEntry(p));
             }
         } catch (final IOException e) {
-            return EMPTY_TAR_ARCHIVE_ENTRIES;
+            return EMPTY_TAR_ARCHIVE_ENTRY_ARRAY;
         }
-        return entries.toArray(new TarArchiveEntry[0]);
+        return entries.toArray(EMPTY_TAR_ARCHIVE_ENTRY_ARRAY);
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java b/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
index 886df81..84e769d 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
@@ -220,7 +220,7 @@ public class ExtraFieldUtils {
             }
         }
 
-        return v.toArray(new ZipExtraField[0]);
+        return v.toArray(EMPTY_ZIP_EXTRA_FIELD_ARRAY);
     }
 
     /**
@@ -416,4 +416,6 @@ public class ExtraFieldUtils {
         }
 
     }
+
+    static final ZipExtraField[] EMPTY_ZIP_EXTRA_FIELD_ARRAY = new ZipExtraField[0];
 }
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/JarMarker.java b/src/main/java/org/apache/commons/compress/archivers/zip/JarMarker.java
index ad12f37..bed5611 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/JarMarker.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/JarMarker.java
@@ -19,6 +19,8 @@ package org.apache.commons.compress.archivers.zip;
 
 import java.util.zip.ZipException;
 
+import org.apache.commons.compress.utils.ByteUtils;
+
 /**
  * If this extra field is added as the very first extra field of the
  * archive, Solaris will consider it an executable jar file.
@@ -28,7 +30,6 @@ public final class JarMarker implements ZipExtraField {
 
     private static final ZipShort ID = new ZipShort(0xCAFE);
     private static final ZipShort NULL = new ZipShort(0);
-    private static final byte[] NO_BYTES = new byte[0];
     private static final JarMarker DEFAULT = new JarMarker();
 
     /** No-arg constructor */
@@ -80,7 +81,7 @@ public final class JarMarker implements ZipExtraField {
      */
     @Override
     public byte[] getLocalFileDataData() {
-        return NO_BYTES;
+        return ByteUtils.EMPTY_BYTE_ARRAY;
     }
 
     /**
@@ -90,7 +91,7 @@ public final class JarMarker implements ZipExtraField {
      */
     @Override
     public byte[] getCentralDirectoryData() {
-        return NO_BYTES;
+        return ByteUtils.EMPTY_BYTE_ARRAY;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/X7875_NewUnix.java b/src/main/java/org/apache/commons/compress/archivers/zip/X7875_NewUnix.java
index 85f9e1a..c2b19d7 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/X7875_NewUnix.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/X7875_NewUnix.java
@@ -23,6 +23,8 @@ import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.zip.ZipException;
 
+import org.apache.commons.compress.utils.ByteUtils;
+
 import static org.apache.commons.compress.archivers.zip.ZipUtil.reverse;
 import static org.apache.commons.compress.archivers.zip.ZipUtil.signedByteToUnsignedInt;
 import static org.apache.commons.compress.archivers.zip.ZipUtil.unsignedIntToSignedByte;
@@ -209,7 +211,7 @@ public class X7875_NewUnix implements ZipExtraField, Cloneable, Serializable {
      */
     @Override
     public byte[] getCentralDirectoryData() {
-        return new byte[0];
+        return ByteUtils.EMPTY_BYTE_ARRAY;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
index 2e0b260..8dafc7a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.java
@@ -20,6 +20,8 @@ package org.apache.commons.compress.archivers.zip;
 
 import java.util.zip.ZipException;
 
+import org.apache.commons.compress.utils.ByteUtils;
+
 import static org.apache.commons.compress.archivers.zip.ZipConstants.DWORD;
 import static org.apache.commons.compress.archivers.zip.ZipConstants.WORD;
 
@@ -47,8 +49,6 @@ public class Zip64ExtendedInformationExtraField implements ZipExtraField {
     private static final String LFH_MUST_HAVE_BOTH_SIZES_MSG =
         "Zip64 extended information must contain"
         + " both size values in the local file header.";
-    private static final byte[] EMPTY = new byte[0];
-
     private ZipEightByteInteger size, compressedSize, relativeHeaderOffset;
     private ZipLong diskStart;
 
@@ -131,7 +131,7 @@ public class Zip64ExtendedInformationExtraField implements ZipExtraField {
             addSizes(data);
             return data;
         }
-        return EMPTY;
+        return ByteUtils.EMPTY_BYTE_ARRAY;
     }
 
     @Override
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
index 085aa19..f23392d 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntry.java
@@ -32,6 +32,7 @@ import java.util.zip.ZipException;
 
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.EntryStreamOffsets;
+import org.apache.commons.compress.utils.ByteUtils;
 
 /**
  * Extension that adds better handling of extra fields and provides
@@ -63,8 +64,6 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
     public static final int CRC_UNKNOWN = -1;
     private static final int SHORT_MASK = 0xFFFF;
     private static final int SHORT_SHIFT = 16;
-    private static final byte[] EMPTY = new byte[0];
-
     /**
      * Indicates how the name of this entry has been determined.
      * @since 1.16
@@ -144,13 +143,13 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
     private String name = null;
     private byte[] rawName = null;
     private GeneralPurposeBit gpb = new GeneralPurposeBit();
-    private static final ZipExtraField[] noExtraFields = new ZipExtraField[0];
     private long localHeaderOffset = OFFSET_UNKNOWN;
     private long dataOffset = OFFSET_UNKNOWN;
     private boolean isStreamContiguous = false;
     private NameSource nameSource = NameSource.NAME;
     private CommentSource commentSource = CommentSource.COMMENT;
     private long diskNumberStart;
+    static final ZipArchiveEntry[] EMPTY_ZIP_ARCHIVE_ENTRY_ARRAY = new ZipArchiveEntry[0];
 
     /**
      * Creates a new zip entry with the specified name.
@@ -450,7 +449,7 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
                 }
             }
         }
-        extraFields = newFields.toArray(noExtraFields);
+        extraFields = newFields.toArray(ExtraFieldUtils.EMPTY_ZIP_EXTRA_FIELD_ARRAY);
         setExtra();
     }
 
@@ -525,12 +524,12 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
             merged.add(l);
         }
         merged.addAll(centralFields);
-        return merged.toArray(noExtraFields);
+        return merged.toArray(ExtraFieldUtils.EMPTY_ZIP_EXTRA_FIELD_ARRAY);
     }
 
     private ZipExtraField[] getParseableExtraFieldsNoCopy() {
         if (extraFields == null) {
-            return noExtraFields;
+            return ExtraFieldUtils.EMPTY_ZIP_EXTRA_FIELD_ARRAY;
         }
         return extraFields;
     }
@@ -559,7 +558,7 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
     }
 
     private ZipExtraField[] getUnparseableOnly() {
-        return unparseableExtra == null ? noExtraFields : new ZipExtraField[] { unparseableExtra };
+        return unparseableExtra == null ? ExtraFieldUtils.EMPTY_ZIP_EXTRA_FIELD_ARRAY : new ZipExtraField[] { unparseableExtra };
     }
 
     private ZipExtraField[] getAllExtraFields() {
@@ -655,7 +654,7 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
         if (extraFields.length == newResult.size()) {
             throw new java.util.NoSuchElementException();
         }
-        extraFields = newResult.toArray(noExtraFields);
+        extraFields = newResult.toArray(ExtraFieldUtils.EMPTY_ZIP_EXTRA_FIELD_ARRAY);
         setExtra();
     }
 
@@ -750,7 +749,7 @@ public class ZipArchiveEntry extends java.util.zip.ZipEntry
      */
     public byte[] getLocalFileDataExtra() {
         final byte[] extra = getExtra();
-        return extra != null ? extra : EMPTY;
+        return extra != null ? extra : ByteUtils.EMPTY_BYTE_ARRAY;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
index 33ea87a..3f20c29 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.java
@@ -52,6 +52,7 @@ import java.util.zip.ZipException;
 
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveOutputStream;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.IOUtils;
 
 /**
@@ -146,8 +147,6 @@ public class ZipArchiveOutputStream extends ArchiveOutputStream {
     @Deprecated
     public static final int EFS_FLAG = GeneralPurposeBit.UFT8_NAMES_FLAG;
 
-    private static final byte[] EMPTY = new byte[0];
-
     /**
      * Current entry.
      */
@@ -649,7 +648,7 @@ public class ZipArchiveOutputStream extends ArchiveOutputStream {
         }
 
         if (!entry.hasWritten) {
-            write(EMPTY, 0, 0);
+            write(ByteUtils.EMPTY_BYTE_ARRAY, 0, 0);
         }
     }
 
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
index 1a62ab8..8635f76 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
@@ -441,7 +441,7 @@ public class ZipFile implements Closeable {
      * @since 1.1
      */
     public Enumeration<ZipArchiveEntry> getEntriesInPhysicalOrder() {
-        final ZipArchiveEntry[] allEntries = entries.toArray(new ZipArchiveEntry[0]);
+        final ZipArchiveEntry[] allEntries = entries.toArray(ZipArchiveEntry.EMPTY_ZIP_ARCHIVE_ENTRY_ARRAY);
         Arrays.sort(allEntries, offsetComparator);
         return Collections.enumeration(Arrays.asList(allEntries));
     }
@@ -488,7 +488,7 @@ public class ZipFile implements Closeable {
      * @since 1.6
      */
     public Iterable<ZipArchiveEntry> getEntriesInPhysicalOrder(final String name) {
-        ZipArchiveEntry[] entriesOfThatName = new ZipArchiveEntry[0];
+        ZipArchiveEntry[] entriesOfThatName = ZipArchiveEntry.EMPTY_ZIP_ARCHIVE_ENTRY_ARRAY;
         if (nameMap.containsKey(name)) {
             entriesOfThatName = nameMap.get(name).toArray(entriesOfThatName);
             Arrays.sort(entriesOfThatName, offsetComparator);
diff --git a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
index 227d1e1..633b672 100644
--- a/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
+++ b/src/main/java/org/apache/commons/compress/compressors/deflate64/HuffmanDecoder.java
@@ -18,6 +18,7 @@
 package org.apache.commons.compress.compressors.deflate64;
 
 import org.apache.commons.compress.utils.BitInputStream;
+import org.apache.commons.compress.utils.ByteUtils;
 
 import java.io.Closeable;
 import java.io.EOFException;
@@ -288,7 +289,7 @@ class HuffmanDecoder implements Closeable {
         private final BinaryTreeNode distanceTree;
 
         private int runBufferPos = 0;
-        private byte[] runBuffer = new byte[0];
+        private byte[] runBuffer = ByteUtils.EMPTY_BYTE_ARRAY;
         private int runBufferLength = 0;
 
         HuffmanCodes(final HuffmanState state, final int[] lengths, final int[] distance) {
diff --git a/src/main/java/org/apache/commons/compress/utils/ByteUtils.java b/src/main/java/org/apache/commons/compress/utils/ByteUtils.java
index 01b5021..fad484f 100644
--- a/src/main/java/org/apache/commons/compress/utils/ByteUtils.java
+++ b/src/main/java/org/apache/commons/compress/utils/ByteUtils.java
@@ -29,6 +29,14 @@ import java.io.OutputStream;
  * @since 1.14
  */
 public final class ByteUtils {
+    
+    /**
+     * Empty array.
+     *
+     * @since 1.21
+     */
+    public static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
+
     private ByteUtils() { /* no instances */ }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/utils/SeekableInMemoryByteChannel.java b/src/main/java/org/apache/commons/compress/utils/SeekableInMemoryByteChannel.java
index 51f5ac3..bee0751 100644
--- a/src/main/java/org/apache/commons/compress/utils/SeekableInMemoryByteChannel.java
+++ b/src/main/java/org/apache/commons/compress/utils/SeekableInMemoryByteChannel.java
@@ -61,7 +61,7 @@ public class SeekableInMemoryByteChannel implements SeekableByteChannel {
      * Parameterless constructor - allocates internal buffer by itself.
      */
     public SeekableInMemoryByteChannel() {
-        this(new byte[0]);
+        this(ByteUtils.EMPTY_BYTE_ARRAY);
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/compress/archivers/ArchiveStreamFactoryTest.java b/src/test/java/org/apache/commons/compress/archivers/ArchiveStreamFactoryTest.java
index ed3a9ce..e5b53b0 100644
--- a/src/test/java/org/apache/commons/compress/archivers/ArchiveStreamFactoryTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/ArchiveStreamFactoryTest.java
@@ -39,6 +39,7 @@ import org.apache.commons.compress.archivers.dump.DumpArchiveInputStream;
 import org.apache.commons.compress.archivers.jar.JarArchiveInputStream;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
 import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Test;
 
 public class ArchiveStreamFactoryTest {
@@ -90,7 +91,7 @@ public class ArchiveStreamFactoryTest {
     public void cantRead7zFromStream() throws Exception {
         ArchiveStreamFactory.DEFAULT
             .createArchiveInputStream(ArchiveStreamFactory.SEVEN_Z,
-                                      new ByteArrayInputStream(new byte[0]));
+                                      new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY));
     }
 
     @Test(expected = StreamingNotSupportedException.class)
@@ -244,7 +245,7 @@ public class ArchiveStreamFactoryTest {
         }
 
         try {
-            ArchiveStreamFactory.detect(new BufferedInputStream(new ByteArrayInputStream(new byte[0])));
+            ArchiveStreamFactory.detect(new BufferedInputStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY)));
             fail("shouldn't be able to detect empty stream");
         } catch (final ArchiveException e) {
             assertEquals("No Archiver found for the stream signature", e.getMessage());
diff --git a/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java b/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java
index e4fd699..2777863 100644
--- a/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java
+++ b/src/test/java/org/apache/commons/compress/archivers/TarTestCase.java
@@ -35,6 +35,7 @@ import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
 import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
 import org.apache.commons.compress.archivers.tar.TarFile;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.CharsetNames;
 import org.apache.commons.compress.utils.IOUtils;
 import org.junit.Test;
@@ -520,7 +521,7 @@ public final class TarTestCase extends AbstractTestCase {
             assertEquals("directory/", directoryEntry.getName());
             assertTrue(directoryEntry.isDirectory());
             byte[] directoryRead = IOUtils.toByteArray(in);
-            assertArrayEquals(new byte[0], directoryRead);
+            assertArrayEquals(ByteUtils.EMPTY_BYTE_ARRAY, directoryRead);
         }
     }
 
@@ -533,7 +534,7 @@ public final class TarTestCase extends AbstractTestCase {
             assertTrue(directoryEntry.isDirectory());
             try (InputStream directoryStream = tarFile.getInputStream(directoryEntry)) {
                 byte[] directoryRead = IOUtils.toByteArray(directoryStream);
-                assertArrayEquals(new byte[0], directoryRead);
+                assertArrayEquals(ByteUtils.EMPTY_BYTE_ARRAY, directoryRead);
             }
         }
     }
diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZNativeHeapTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZNativeHeapTest.java
index 5c1a855..804519e 100644
--- a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZNativeHeapTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZNativeHeapTest.java
@@ -29,6 +29,7 @@ import org.apache.commons.compress.AbstractTestCase;
 import org.apache.commons.compress.archivers.sevenz.Coders.DeflateDecoder;
 import org.apache.commons.compress.archivers.sevenz.Coders.DeflateDecoder.DeflateDecoderInputStream;
 import org.apache.commons.compress.archivers.sevenz.Coders.DeflateDecoder.DeflateDecoderOutputStream;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Test;
 
 public class SevenZNativeHeapTest extends AbstractTestCase {
@@ -51,7 +52,7 @@ public class SevenZNativeHeapTest extends AbstractTestCase {
         final Coders.DeflateDecoder deflateDecoder = new DeflateDecoder();
         final DelegatingInflater delegatingInflater;
         try (final DeflateDecoderInputStream inputStream = (DeflateDecoderInputStream) deflateDecoder.decode("dummy",
-            new ByteArrayInputStream(new byte[0]), 0, null, null, Integer.MAX_VALUE)) {
+            new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY), 0, null, null, Integer.MAX_VALUE)) {
             delegatingInflater = new DelegatingInflater(inputStream.inflater);
             inputStream.inflater = delegatingInflater;
         }
diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java
index 4221c5e..6ff0e20 100644
--- a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java
@@ -37,6 +37,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.Iterator;
 import org.apache.commons.compress.AbstractTestCase;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
 import org.tukaani.xz.LZMA2Options;
 
@@ -81,7 +82,7 @@ public class SevenZOutputFileTest extends AbstractTestCase {
             entry.setCreationDate(creationDate);
             entry.setAccessDate(accessDate);
             outArchive.putArchiveEntry(entry);
-            outArchive.write(new byte[0]);
+            outArchive.write(ByteUtils.EMPTY_BYTE_ARRAY);
             outArchive.closeArchiveEntry();
 
             entry = new SevenZArchiveEntry();
@@ -89,7 +90,7 @@ public class SevenZOutputFileTest extends AbstractTestCase {
             entry.setCreationDate(creationDate);
             entry.setAccessDate(accessDate);
             outArchive.putArchiveEntry(entry);
-            outArchive.write(new ByteArrayInputStream(new byte[0]));
+            outArchive.write(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY));
             outArchive.closeArchiveEntry();
 
             entry = new SevenZArchiveEntry();
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java
index 4eef161..9e915aa 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java
@@ -27,6 +27,7 @@ import java.util.Map;
 
 import org.apache.commons.compress.archivers.zip.ZipEncoding;
 import org.apache.commons.compress.archivers.zip.ZipEncodingHelper;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.CharsetNames;
 import org.apache.commons.compress.utils.IOUtils;
 import org.junit.Test;
@@ -90,7 +91,7 @@ public class TarUtilsTest {
     @Test
     public void testParseOctalInvalid() throws Exception{
         byte [] buffer;
-        buffer=new byte[0]; // empty byte array
+        buffer=ByteUtils.EMPTY_BYTE_ARRAY;
         try {
             TarUtils.parseOctal(buffer,0, buffer.length);
             fail("Expected IllegalArgumentException - should be at least 2 bytes long");
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/BitStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/BitStreamTest.java
index 87c2fb0..0c8781f 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/BitStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/BitStreamTest.java
@@ -23,13 +23,14 @@ import static org.junit.Assert.assertEquals;
 
 import java.io.ByteArrayInputStream;
 
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Test;
 
 public class BitStreamTest {
 
     @Test
     public void testEmptyStream() throws Exception {
-        final BitStream stream = new BitStream(new ByteArrayInputStream(new byte[0]));
+        final BitStream stream = new BitStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY));
         assertEquals("next bit", -1, stream.nextBit());
         assertEquals("next bit", -1, stream.nextBit());
         assertEquals("next bit", -1, stream.nextBit());
@@ -64,7 +65,7 @@ public class BitStreamTest {
 
     @Test
     public void testNextByteFromEmptyStream() throws Exception {
-        final BitStream stream = new BitStream(new ByteArrayInputStream(new byte[0]));
+        final BitStream stream = new BitStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY));
         assertEquals("next byte", -1, stream.nextByte());
         assertEquals("next byte", -1, stream.nextByte());
         stream.close();
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java
index f18ec57..1b963f6 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.commons.compress.archivers.zip;
 
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -101,7 +102,7 @@ public class X7875_NewUnixTest {
     @Test
     public void testTrimLeadingZeroesForceMinLength4() {
         final byte[] NULL = null;
-        final byte[] EMPTY = new byte[0];
+        final byte[] EMPTY = ByteUtils.EMPTY_BYTE_ARRAY;
         final byte[] ONE_ZERO = {0};
         final byte[] TWO_ZEROES = {0, 0};
         final byte[] FOUR_ZEROES = {0, 0, 0, 0};
@@ -229,7 +230,7 @@ public class X7875_NewUnixTest {
 
         assertEquals(0, xf.getCentralDirectoryLength().getValue());
         result = xf.getCentralDirectoryData();
-        assertArrayEquals(new byte[0], result);
+        assertArrayEquals(ByteUtils.EMPTY_BYTE_ARRAY, result);
 
         // And now we re-parse:
         xf.parseFromCentralDirectoryData(result, 0, result.length);
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java
index 122d8a9..ba0fef4 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java
@@ -29,6 +29,7 @@ import java.io.ByteArrayOutputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipException;
 
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -52,7 +53,7 @@ public class ZipArchiveEntryTest {
         a.setMode(0755);
         final UnrecognizedExtraField u = new UnrecognizedExtraField();
         u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
-        u.setLocalFileDataData(new byte[0]);
+        u.setLocalFileDataData(ByteUtils.EMPTY_BYTE_ARRAY);
 
         final ZipArchiveEntry ze = new ZipArchiveEntry("test/");
         ze.setExtraFields(new ZipExtraField[] {a, u});
@@ -106,7 +107,7 @@ public class ZipArchiveEntryTest {
         a.setMode(0755);
         final UnrecognizedExtraField u = new UnrecognizedExtraField();
         u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
-        u.setLocalFileDataData(new byte[0]);
+        u.setLocalFileDataData(ByteUtils.EMPTY_BYTE_ARRAY);
 
         final ZipArchiveEntry ze = new ZipArchiveEntry("test/");
         ze.setExtraFields(new ZipExtraField[] {a, u});
@@ -153,7 +154,7 @@ public class ZipArchiveEntryTest {
         a.setMode(0755);
         final UnrecognizedExtraField u = new UnrecognizedExtraField();
         u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
-        u.setLocalFileDataData(new byte[0]);
+        u.setLocalFileDataData(ByteUtils.EMPTY_BYTE_ARRAY);
 
         final ZipArchiveEntry ze = new ZipArchiveEntry("test/");
         ze.setExtraFields(new ZipExtraField[] {a, u});
@@ -363,7 +364,7 @@ public class ZipArchiveEntryTest {
         a.setMode(0755);
         final UnrecognizedExtraField u = new UnrecognizedExtraField();
         u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
-        u.setLocalFileDataData(new byte[0]);
+        u.setLocalFileDataData(ByteUtils.EMPTY_BYTE_ARRAY);
         final UnparseableExtraFieldData x = new UnparseableExtraFieldData();
         final byte[] unparseable = new byte[] {
             0, 0, (byte) 0xff, (byte) 0xff, 0, 0, 0
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
index 4fa303a..befabb3 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
@@ -44,6 +44,7 @@ import java.util.zip.ZipException;
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 import org.apache.commons.compress.archivers.ArchiveStreamFactory;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.IOUtils;
 import org.junit.Assert;
 import org.junit.Rule;
@@ -324,7 +325,7 @@ public class ZipArchiveInputStreamTest {
     @Test
     public void properlyMarksEntriesAsUnreadableIfUncompressedSizeIsUnknown() throws Exception {
         // we never read any data
-        try (ZipArchiveInputStream zis = new ZipArchiveInputStream(new ByteArrayInputStream(new byte[0]))) {
+        try (ZipArchiveInputStream zis = new ZipArchiveInputStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY))) {
             final ZipArchiveEntry e = new ZipArchiveEntry("test");
             e.setMethod(ZipMethod.DEFLATED.getCode());
             assertTrue(zis.canReadEntryData(e));
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
index 113696e..bab4b81 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
@@ -52,6 +52,7 @@ import java.util.zip.CRC32;
 import java.util.zip.Deflater;
 import java.util.zip.ZipEntry;
 
+import org.apache.commons.compress.utils.ByteUtils;
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
 import org.junit.After;
@@ -767,7 +768,7 @@ public class ZipFileTest {
     public void throwsExceptionWhenWritingPreamble() throws IOException {
         final ZipArchiveOutputStream outputStream = new ZipArchiveOutputStream(new ByteArrayOutputStream());
         outputStream.putArchiveEntry(new ZipArchiveEntry());
-        outputStream.writePreamble(new byte[0]);
+        outputStream.writePreamble(ByteUtils.EMPTY_BYTE_ARRAY);
     }
 
     @Test
@@ -871,7 +872,7 @@ public class ZipFileTest {
             final byte[] bytes = new byte[0x40000];
             final int read = stream.read(bytes);
             if (read < 0) {
-                full = new byte[0];
+                full = ByteUtils.EMPTY_BYTE_ARRAY;
             }
             else {
                 full = readStreamRest(bytes, read, stream);
@@ -887,7 +888,7 @@ public class ZipFileTest {
             byte[] full;
             final int single = stream.read();
             if (single < 0) {
-                full = new byte[0];
+                full = ByteUtils.EMPTY_BYTE_ARRAY;
             }
             else {
                 final byte[] big = new byte[0x40000];
diff --git a/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java b/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java
index aa07498..8a0471a 100644
--- a/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java
+++ b/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java
@@ -39,6 +39,7 @@ import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
 import org.apache.commons.compress.compressors.pack200.Pack200CompressorInputStream;
 import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
 import org.apache.commons.compress.compressors.zstandard.ZstdCompressorInputStream;
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Test;
 
 @SuppressWarnings("deprecation") // deliberately tests setDecompressConcatenated
@@ -119,7 +120,7 @@ public final class DetectCompressorTestCase {
         assertTrue(zstd instanceof ZstdCompressorInputStream);
 
         try {
-            factory.createCompressorInputStream(new ByteArrayInputStream(new byte[0]));
+            factory.createCompressorInputStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY));
             fail("No exception thrown for an empty input stream");
         } catch (final CompressorException e) {
             // expected
@@ -145,7 +146,7 @@ public final class DetectCompressorTestCase {
         assertEquals(CompressorStreamFactory.LZMA, detect("COMPRESS-382"));
 
         try {
-            CompressorStreamFactory.detect(new BufferedInputStream(new ByteArrayInputStream(new byte[0])));
+            CompressorStreamFactory.detect(new BufferedInputStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY)));
             fail("shouldn't be able to detect empty stream");
         } catch (final CompressorException e) {
             assertEquals("No Compressor found for the stream signature.", e.getMessage());
diff --git a/src/test/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStreamTest.java b/src/test/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStreamTest.java
index 4145018..19128da 100644
--- a/src/test/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/compressors/lz77support/AbstractLZ77CompressorInputStreamTest.java
@@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.compress.utils.ByteUtils;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
@@ -60,7 +61,7 @@ public class AbstractLZ77CompressorInputStreamTest {
     @Test
     public void prefillCanBeUsedForBackReferences() throws IOException {
         final byte[] data = new byte[] { 1, 2, 3, 4 };
-        try (TestStream s = new TestStream(new ByteArrayInputStream(new byte[0]))) {
+        try (TestStream s = new TestStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY))) {
             s.prefill(data);
             s.startBackReference(2, 4);
             final byte[] r = new byte[4];
@@ -74,7 +75,7 @@ public class AbstractLZ77CompressorInputStreamTest {
         final byte[] data = new byte[2048];
         data[2046] = 3;
         data[2047] = 4;
-        try (TestStream s = new TestStream(new ByteArrayInputStream(new byte[0]))) {
+        try (TestStream s = new TestStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY))) {
             s.prefill(data);
             s.startBackReference(2, 4);
             final byte[] r = new byte[4];
diff --git a/src/test/java/org/apache/commons/compress/utils/ByteUtilsTest.java b/src/test/java/org/apache/commons/compress/utils/ByteUtilsTest.java
index 7294c3a..45b52d3 100644
--- a/src/test/java/org/apache/commons/compress/utils/ByteUtilsTest.java
+++ b/src/test/java/org/apache/commons/compress/utils/ByteUtilsTest.java
@@ -69,7 +69,7 @@ public class ByteUtilsTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void fromLittleEndianFromArrayThrowsForLengthTooBig() {
-        fromLittleEndian(new byte[0], 0, 9);
+        fromLittleEndian(ByteUtils.EMPTY_BYTE_ARRAY, 0, 9);
     }
 
     @Test
@@ -86,7 +86,7 @@ public class ByteUtilsTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void fromLittleEndianFromStreamThrowsForLengthTooBig() throws IOException {
-        fromLittleEndian(new ByteArrayInputStream(new byte[0]), 9);
+        fromLittleEndian(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY), 9);
     }
 
     @Test(expected = IOException.class)
@@ -110,7 +110,7 @@ public class ByteUtilsTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void fromLittleEndianFromSupplierThrowsForLengthTooBig() throws IOException {
-        fromLittleEndian(new InputStreamByteSupplier(new ByteArrayInputStream(new byte[0])), 9);
+        fromLittleEndian(new InputStreamByteSupplier(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY)), 9);
     }
 
     @Test(expected = IOException.class)
@@ -133,7 +133,7 @@ public class ByteUtilsTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void fromLittleEndianFromDataInputThrowsForLengthTooBig() throws IOException {
-        final DataInput din = new DataInputStream(new ByteArrayInputStream(new byte[0]));
+        final DataInput din = new DataInputStream(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY));
         fromLittleEndian(din, 9);
     }
 
diff --git a/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java b/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
index 2b1c97c..d36d376 100644
--- a/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/utils/ChecksumCalculatingInputStreamTest.java
@@ -41,8 +41,7 @@ public class ChecksumCalculatingInputStreamTest {
     public void testSkipReturningZero() throws IOException {
 
         final Adler32 adler32 = new Adler32();
-        final byte[] byteArray = new byte[0];
-        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
+        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY);
         final ChecksumCalculatingInputStream checksumCalculatingInputStream = new ChecksumCalculatingInputStream(adler32, byteArrayInputStream);
         final long skipResult = checksumCalculatingInputStream.skip(60L);
 
diff --git a/src/test/java/org/apache/commons/compress/utils/IOUtilsTest.java b/src/test/java/org/apache/commons/compress/utils/IOUtilsTest.java
index 57cacd5..9b2b314 100644
--- a/src/test/java/org/apache/commons/compress/utils/IOUtilsTest.java
+++ b/src/test/java/org/apache/commons/compress/utils/IOUtilsTest.java
@@ -89,7 +89,7 @@ public class IOUtilsTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void copyThrowsOnZeroBufferSize() throws IOException {
-        IOUtils.copy(new ByteArrayInputStream(new byte[0]), new ByteArrayOutputStream(), 0);
+        IOUtils.copy(new ByteArrayInputStream(ByteUtils.EMPTY_BYTE_ARRAY), new ByteArrayOutputStream(), 0);
     }
 
     private static void readFully(final byte[] source, final ByteBuffer b) throws IOException {
diff --git a/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java b/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java
index dc9dedb..1bdfd3c 100644
--- a/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java
+++ b/src/test/java/org/apache/commons/compress/utils/MultiReadOnlySeekableByteChannelTest.java
@@ -144,7 +144,7 @@ public class MultiReadOnlySeekableByteChannelTest {
     }
 
     private SeekableByteChannel makeEmpty() {
-        return makeSingle(new byte[0]);
+        return makeSingle(ByteUtils.EMPTY_BYTE_ARRAY);
     }
 
     private SeekableByteChannel makeSingle(final byte[] arr) {
diff --git a/src/test/java/org/apache/commons/compress/utils/ZipSplitReadOnlySeekableByteChannelTest.java b/src/test/java/org/apache/commons/compress/utils/ZipSplitReadOnlySeekableByteChannelTest.java
index 1bc7c2c..4259068 100644
--- a/src/test/java/org/apache/commons/compress/utils/ZipSplitReadOnlySeekableByteChannelTest.java
+++ b/src/test/java/org/apache/commons/compress/utils/ZipSplitReadOnlySeekableByteChannelTest.java
@@ -99,7 +99,7 @@ public class ZipSplitReadOnlySeekableByteChannelTest {
 
     @Test
     public void forOrderedSeekableByteChannelsReturnsIdentityForSingleElement() throws IOException {
-        final SeekableByteChannel emptyChannel = new SeekableInMemoryByteChannel(new byte[0]);
+        final SeekableByteChannel emptyChannel = new SeekableInMemoryByteChannel(ByteUtils.EMPTY_BYTE_ARRAY);
         final SeekableByteChannel channel = ZipSplitReadOnlySeekableByteChannel.forOrderedSeekableByteChannels(emptyChannel);
         Assert.assertSame(emptyChannel, channel);
     }