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 2022/10/06 00:39:19 UTC

[commons-compress] branch master updated: Refactor to use own utility

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 c1b31322 Refactor to use own utility
c1b31322 is described below

commit c1b31322cddb27ef7dd88dbf4035ba81ffc39d80
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Oct 5 20:35:38 2022 -0400

    Refactor to use own utility
    
    * Explicitly use the default Charset
    * Use Arrays.setAll()
    * Rename internal name
    * Format tweak
    * Refactor to local variable
---
 .../archivers/arj/ArjArchiveInputStream.java       |  7 +---
 .../commons/compress/archivers/sevenz/Folder.java  |  2 +-
 .../archivers/sevenz/SevenZOutputFile.java         |  5 +--
 .../commons/compress/archivers/tar/TarUtils.java   | 26 ++++++-------
 .../compress/archivers/zip/AsiExtraField.java      | 22 +++++------
 .../compress/archivers/zip/ExtraFieldUtils.java    |  8 ++--
 .../archivers/zip/ZipSplitOutputStream.java        |  3 +-
 .../bzip2/BZip2CompressorOutputStream.java         |  7 ++--
 .../compress/compressors/bzip2/BlockSort.java      |  9 +++--
 .../harmony/archive/internal/nls/Messages.java     | 10 ++---
 .../harmony/pack200/AttributeDefinitionBands.java  | 11 +++---
 .../compress/harmony/pack200/BHSDCodec.java        |  5 +--
 .../commons/compress/harmony/pack200/BandSet.java  | 44 +++++++++-------------
 .../commons/compress/harmony/pack200/BcBands.java  | 13 ++-----
 .../compress/harmony/pack200/ClassBands.java       |  5 +--
 .../commons/compress/harmony/pack200/CpBands.java  | 12 ++----
 .../compress/harmony/pack200/FileBands.java        |  5 +--
 .../harmony/pack200/MetadataBandGroup.java         |  6 +--
 .../commons/compress/harmony/pack200/Segment.java  |  2 +-
 .../compress/harmony/unpack200/BandSet.java        | 29 +++++---------
 .../compress/harmony/unpack200/ClassBands.java     | 13 ++-----
 .../compress/harmony/unpack200/CpBands.java        |  9 ++---
 .../compress/harmony/unpack200/IcBands.java        |  7 +---
 .../compress/harmony/unpack200/IcTuple.java        |  9 ++---
 .../harmony/unpack200/MetadataBandGroup.java       |  8 +---
 .../compress/harmony/unpack200/Segment.java        |  9 ++---
 .../unpack200/bytecode/BCIRenumberedAttribute.java |  5 +--
 .../unpack200/bytecode/InnerClassesAttribute.java  |  6 +--
 ...timeVisibleorInvisibleAnnotationsAttribute.java |  6 +--
 ...leorInvisibleParameterAnnotationsAttribute.java |  6 +--
 .../unpack200/bytecode/forms/LookupSwitchForm.java | 10 ++---
 .../unpack200/bytecode/forms/TableSwitchForm.java  |  6 +--
 .../commons/compress/utils/ArchiveUtils.java       |  4 +-
 33 files changed, 123 insertions(+), 206 deletions(-)

diff --git a/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java
index 4b20c122..1c2bdc9b 100644
--- a/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.java
@@ -31,6 +31,7 @@ import org.apache.commons.compress.archivers.ArchiveException;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 import org.apache.commons.compress.utils.BoundedInputStream;
 import org.apache.commons.compress.utils.CRC32VerifyingInputStream;
+import org.apache.commons.compress.utils.Charsets;
 import org.apache.commons.compress.utils.IOUtils;
 
 /**
@@ -115,11 +116,7 @@ public class ArjArchiveInputStream extends ArchiveInputStream {
             while ((nextByte = dataIn.readUnsignedByte()) != 0) {
                 buffer.write(nextByte);
             }
-            if (charsetName != null) {
-                return buffer.toString(charsetName);
-            }
-            // intentionally using the default encoding as that's the contract for a null charsetName
-            return buffer.toString();
+            return buffer.toString(Charsets.toCharset(charsetName).name());
         }
     }
 
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 82fe51fa..26421385 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
@@ -97,7 +97,7 @@ class Folder {
         if (totalOutputStreams == 0) {
             return 0;
         }
-        for (int i = ((int)totalOutputStreams) - 1; i >= 0; i--) {
+        for (int i = ((int) totalOutputStreams) - 1; i >= 0; i--) {
             if (findBindPairForOutStream(i) < 0) {
                 return unpackSizes[i];
             }
diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
index a8e70d5f..ba6de451 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java
@@ -37,6 +37,7 @@ import java.nio.file.OpenOption;
 import java.nio.file.Path;
 import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collections;
 import java.util.Date;
@@ -216,9 +217,7 @@ public class SevenZOutputFile implements Closeable {
             entry.setHasCrc(true);
             if (additionalCountingStreams != null) {
                 final long[] sizes = new long[additionalCountingStreams.length];
-                for (int i = 0; i < additionalCountingStreams.length; i++) {
-                    sizes[i] = additionalCountingStreams[i].getBytesWritten();
-                }
+                Arrays.setAll(sizes, i -> additionalCountingStreams[i].getBytesWritten());
                 additionalSizes.put(entry, sizes);
             }
         } else {
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
index 44ba57ae..b0393639 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
@@ -30,6 +30,7 @@ import java.io.InputStream;
 import java.io.UncheckedIOException;
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -116,12 +117,12 @@ public class TarUtils {
      * @throws IllegalArgumentException if the trailing space/NUL is missing or if a invalid byte is detected.
      */
     public static long parseOctal(final byte[] buffer, final int offset, final int length) {
-        long    result = 0;
-        int     end = offset + length;
-        int     start = offset;
+        long result = 0;
+        int end = offset + length;
+        int start = offset;
 
-        if (length < 2){
-            throw new IllegalArgumentException("Length "+length+" must be at least 2");
+        if (length < 2) {
+            throw new IllegalArgumentException("Length " + length + " must be at least 2");
         }
 
         if (buffer[start] == 0) {
@@ -129,7 +130,7 @@ public class TarUtils {
         }
 
         // Skip leading spaces
-        while (start < end){
+        while (start < end) {
             if (buffer[start] != ' ') {
                 break;
             }
@@ -146,12 +147,11 @@ public class TarUtils {
             trailer = buffer[end - 1];
         }
 
-        for ( ;start < end; start++) {
+        for (; start < end; start++) {
             final byte currentByte = buffer[start];
             // CheckStyle:MagicNumber OFF
-            if (currentByte < '0' || currentByte > '7'){
-                throw new IllegalArgumentException(
-                        exceptionMessage(buffer, offset, length, start, currentByte));
+            if (currentByte < '0' || currentByte > '7') {
+                throw new IllegalArgumentException(exceptionMessage(buffer, offset, length, start, currentByte));
             }
             result = (result << 3) + (currentByte - '0'); // convert from ASCII
             // CheckStyle:MagicNumber ON
@@ -255,10 +255,10 @@ public class TarUtils {
         // archive (deprecating the existing public methods, of
         // course) and dealing with the fact that ZipEncoding#decode
         // can throw an IOException which parseOctal* doesn't declare
-        String string = new String(buffer, offset, length);
+        String string = new String(buffer, offset, length, Charset.defaultCharset());
 
-        string=string.replace("\0", "{NUL}"); // Replace NULs to allow string to be printed
-        return "Invalid byte "+currentByte+" at offset "+(current-offset)+" in '"+string+"' len="+length;
+        string = string.replace("\0", "{NUL}"); // Replace NULs to allow string to be printed
+        return "Invalid byte " + currentByte + " at offset " + (current - offset) + " in '" + string + "' len=" + length;
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java b/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
index b3c6ca70..e086e0e8 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/AsiExtraField.java
@@ -21,6 +21,7 @@ package org.apache.commons.compress.archivers.zip;
 import static org.apache.commons.compress.archivers.zip.ZipConstants.SHORT;
 import static org.apache.commons.compress.archivers.zip.ZipConstants.WORD;
 
+import java.nio.charset.Charset;
 import java.util.zip.CRC32;
 import java.util.zip.ZipException;
 
@@ -104,13 +105,15 @@ public class AsiExtraField implements ZipExtraField, UnixStat, Cloneable {
      */
     @Override
     public ZipShort getLocalFileDataLength() {
-        return new ZipShort(WORD         // CRC
+        // @formatter:off
+        return new ZipShort(WORD      // CRC
                           + 2         // Mode
-                          + WORD         // SizDev
+                          + WORD      // SizDev
                           + 2         // UID
                           + 2         // GID
-                          + getLinkedFile().getBytes().length);
+                          + getLinkedFile().getBytes(Charset.defaultCharset()).length);
                           // Uses default charset - see class Javadoc
+        // @formatter:on
     }
 
     /**
@@ -133,15 +136,12 @@ public class AsiExtraField implements ZipExtraField, UnixStat, Cloneable {
         final byte[] data = new byte[getLocalFileDataLength().getValue() - WORD];
         System.arraycopy(ZipShort.getBytes(getMode()), 0, data, 0, 2);
 
-        final byte[] linkArray = getLinkedFile().getBytes(); // Uses default charset - see class Javadoc
+        final byte[] linkArray = getLinkedFile().getBytes(Charset.defaultCharset()); // Uses default charset - see class Javadoc
         // CheckStyle:MagicNumber OFF
-        System.arraycopy(ZipLong.getBytes(linkArray.length),
-                         0, data, 2, WORD);
+        System.arraycopy(ZipLong.getBytes(linkArray.length), 0, data, 2, WORD);
 
-        System.arraycopy(ZipShort.getBytes(getUserId()),
-                         0, data, 6, 2);
-        System.arraycopy(ZipShort.getBytes(getGroupId()),
-                         0, data, 8, 2);
+        System.arraycopy(ZipShort.getBytes(getUserId()), 0, data, 6, 2);
+        System.arraycopy(ZipShort.getBytes(getGroupId()), 0, data, 8, 2);
 
         System.arraycopy(linkArray, 0, data, 10, linkArray.length);
         // CheckStyle:MagicNumber ON
@@ -301,7 +301,7 @@ public class AsiExtraField implements ZipExtraField, UnixStat, Cloneable {
         } else {
             final byte[] linkArray = new byte[linkArrayLength];
             System.arraycopy(tmp, 10, linkArray, 0, linkArrayLength);
-            link = new String(linkArray); // Uses default charset - see class Javadoc
+            link = new String(linkArray, Charset.defaultCharset()); // Uses default charset - see class Javadoc
         }
         // CheckStyle:MagicNumber ON
         setDirectory((newMode & DIR_FLAG) != 0);
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 699754b9..18b5151a 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
@@ -36,10 +36,10 @@ public class ExtraFieldUtils {
     /**
      * Static registry of known extra fields.
      */
-    private static final Map<ZipShort, Class<?>> implementations;
+    private static final Map<ZipShort, Class<?>> IMPLEMENTATIONS;
 
     static {
-        implementations = new ConcurrentHashMap<>();
+        IMPLEMENTATIONS = new ConcurrentHashMap<>();
         register(AsiExtraField.class);
         register(X5455_ExtendedTimestamp.class);
         register(X7875_NewUnix.class);
@@ -66,7 +66,7 @@ public class ExtraFieldUtils {
     public static void register(final Class<?> c) {
         try {
             final ZipExtraField ze = (ZipExtraField) c.newInstance();
-            implementations.put(ze.getHeaderId(), c);
+            IMPLEMENTATIONS.put(ze.getHeaderId(), c);
         } catch (final ClassCastException cc) { // NOSONAR
             throw new IllegalArgumentException(c + " doesn't implement ZipExtraField"); //NOSONAR
         } catch (final InstantiationException ie) { // NOSONAR
@@ -106,7 +106,7 @@ public class ExtraFieldUtils {
      */
     public static ZipExtraField createExtraFieldNoDefault(final ZipShort headerId)
         throws InstantiationException, IllegalAccessException {
-        final Class<?> c = implementations.get(headerId);
+        final Class<?> c = IMPLEMENTATIONS.get(headerId);
         if (c != null) {
             return (ZipExtraField) c.newInstance();
         }
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipSplitOutputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipSplitOutputStream.java
index ea8a3333..c8edf353 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipSplitOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipSplitOutputStream.java
@@ -232,7 +232,8 @@ class ZipSplitOutputStream extends OutputStream {
             extension += newZipSplitSegmentSuffixIndex;
         }
 
-        String dir = Objects.nonNull(zipFile.getParent()) ? zipFile.getParent().toAbsolutePath().toString() : ".";
+        final Path parent = zipFile.getParent();
+        final String dir = Objects.nonNull(parent) ? parent.toAbsolutePath().toString() : ".";
         final Path newFile = zipFile.getFileSystem().getPath(dir, baseName + extension);
 
         if (Files.exists(newFile)) {
diff --git a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
index 44429d57..1026424c 100644
--- a/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
+++ b/src/main/java/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.java
@@ -20,6 +20,7 @@ package org.apache.commons.compress.compressors.bzip2;
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Arrays;
 
 import org.apache.commons.compress.compressors.CompressorOutputStream;
 
@@ -1191,14 +1192,12 @@ public class BZip2CompressorOutputStream extends CompressorOutputStream
 
         final int eob = nInUseShadow + 1;
 
-        for (int i = eob; i >= 0; i--) {
-            mtfFreq[i] = 0;
-        }
+        Arrays.fill(mtfFreq, 0, eob + 1, 0);
 
         for (int i = nInUseShadow; --i >= 0;) {
             yy[i] = (byte) i;
         }
-
+        
         int wr = 0;
         int zPend = 0;
 
diff --git a/src/main/java/org/apache/commons/compress/compressors/bzip2/BlockSort.java b/src/main/java/org/apache/commons/compress/compressors/bzip2/BlockSort.java
index f6be1d7d..8438958c 100644
--- a/src/main/java/org/apache/commons/compress/compressors/bzip2/BlockSort.java
+++ b/src/main/java/org/apache/commons/compress/compressors/bzip2/BlockSort.java
@@ -18,6 +18,7 @@
  */
 package org.apache.commons.compress.compressors.bzip2;
 
+import java.util.Arrays;
 import java.util.BitSet;
 
 /**
@@ -107,6 +108,8 @@ class BlockSort {
      * I've also removed the now unused randomization code.
      */
 
+    private static final int FTAB_LENGTH = 65537; // 262148 byte
+
     /*
      * LBZ2: If you are ever unlucky/improbable enough to get a stack
      * overflow whilst sorting, increase the following constant and
@@ -136,7 +139,7 @@ class BlockSort {
     private final int[] mainSort_copy = new int[256]; // 1024 byte
     private final boolean[] mainSort_bigDone = new boolean[256]; // 256 byte
 
-    private final int[] ftab = new int[65537]; // 262148 byte
+    private final int[] ftab = new int[FTAB_LENGTH]; // 262148 byte
 
     /**
      * Array instance identical to Data's sfmap, both are used only
@@ -916,9 +919,7 @@ class BlockSort {
         final boolean firstAttemptShadow = this.firstAttempt;
 
         // LBZ2: Set up the 2-byte frequency table
-        for (int i = 65537; --i >= 0;) {
-            ftab[i] = 0;
-        }
+        Arrays.fill(ftab, 0);
 
         /*
          * In the various block-sized structures, live data runs from 0 to
diff --git a/src/main/java/org/apache/commons/compress/harmony/archive/internal/nls/Messages.java b/src/main/java/org/apache/commons/compress/harmony/archive/internal/nls/Messages.java
index bee8b778..84a58217 100644
--- a/src/main/java/org/apache/commons/compress/harmony/archive/internal/nls/Messages.java
+++ b/src/main/java/org/apache/commons/compress/harmony/archive/internal/nls/Messages.java
@@ -25,8 +25,10 @@ package org.apache.commons.compress.harmony.archive.internal.nls;
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Arrays;
 import java.util.Locale;
 import java.util.MissingResourceException;
+import java.util.Objects;
 import java.util.ResourceBundle;
 
 //import org.apache.commons.compress.harmony.kernel.vm.VM;
@@ -145,13 +147,7 @@ public class Messages {
     public static String format(final String format, final Object[] args) {
         final StringBuilder answer = new StringBuilder(format.length() + (args.length * 20));
         final String[] argStrings = new String[args.length];
-        for (int i = 0; i < args.length; ++i) {
-            if (args[i] == null) {
-                argStrings[i] = "<null>"; //$NON-NLS-1$
-            } else {
-                argStrings[i] = args[i].toString();
-            }
-        }
+        Arrays.setAll(argStrings, i -> Objects.toString(args[i], "<null>")); //$NON-NLS-1$
         int lastI = 0;
         for (int i = format.indexOf('{', 0); i >= 0; i = format.indexOf('{', lastI)) {
             if (i != 0 && format.charAt(i - 1) == '\\') {
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/AttributeDefinitionBands.java b/src/main/java/org/apache/commons/compress/harmony/pack200/AttributeDefinitionBands.java
index 574ff779..19222337 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/AttributeDefinitionBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/AttributeDefinitionBands.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -175,13 +176,11 @@ public class AttributeDefinitionBands extends BandSet {
         return temp;
     }
 
-    private void addAttributeDefinitions(final Map<String, String> layouts, final int[] availableIndices, final int contextType) {
+    private void addAttributeDefinitions(final Map<String, String> layoutMap, final int[] availableIndices, final int contextType) {
         final int i = 0;
-        for (String name : layouts.keySet()) {
-            final String layout = layouts.get(name);
+        layoutMap.forEach((name, layout) -> {
             final int index = availableIndices[i];
-            final AttributeDefinition definition = new AttributeDefinition(index, contextType, cpBands.getCPUtf8(name),
-                cpBands.getCPUtf8(layout));
+            final AttributeDefinition definition = new AttributeDefinition(index, contextType, cpBands.getCPUtf8(name), cpBands.getCPUtf8(layout));
             attributeDefinitions.add(definition);
             switch (contextType) {
             case CONTEXT_CLASS:
@@ -196,7 +195,7 @@ public class AttributeDefinitionBands extends BandSet {
             case CONTEXT_CODE:
                 codeAttributeLayouts.add(definition);
             }
-        }
+        });
     }
 
     public List<AttributeDefinition> getClassAttributeLayouts() {
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/BHSDCodec.java b/src/main/java/org/apache/commons/compress/harmony/pack200/BHSDCodec.java
index ad2b267e..ff1d99bd 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/BHSDCodec.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/BHSDCodec.java
@@ -20,6 +20,7 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.compress.utils.ExactMath;
@@ -167,9 +168,7 @@ public final class BHSDCodec extends Codec {
         largest = calculateLargest();
 
         powers = new long[b];
-        for (int c = 0; c < b; c++) {
-            powers[c] = (long) Math.pow(h, c);
-        }
+        Arrays.setAll(powers, c -> (long) Math.pow(h, c));
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java b/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java
index 9c98966d..c4a1eb8c 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/BandSet.java
@@ -19,9 +19,12 @@ package org.apache.commons.compress.harmony.pack200;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
 /**
@@ -350,28 +353,27 @@ public abstract class BandSet {
         results.numCodecsTried += 3; // quite a bit more effort to try this codec
         final Map<Integer, Integer> distinctValues = bandData.distinctValues;
 
-        final List<Integer> favoured = new ArrayList<>();
+        final List<Integer> favored = new ArrayList<>();
         distinctValues.forEach((k, v) -> {
             if (v.intValue() > 2 || distinctValues.size() < 256) { // TODO: tweak
-                favoured.add(k);
+                favored.add(k);
             }
         });
 
-        // Sort the favoured list with the most commonly occurring first
+        // Sort the favored list with the most commonly occurring first
         if (distinctValues.size() > 255) {
-            favoured.sort((arg0, arg1) -> distinctValues.get(arg1).compareTo(distinctValues.get(arg0)));
+            favored.sort((arg0, arg1) -> distinctValues.get(arg1).compareTo(distinctValues.get(arg0)));
         }
 
-        final IntList unfavoured = new IntList();
-        final Map<Integer, Integer> favouredToIndex = new HashMap<>();
-        for (int i = 0; i < favoured.size(); i++) {
-            final Integer value = favoured.get(i);
-            favouredToIndex.put(value, Integer.valueOf(i));
+        final Map<Integer, Integer> favoredToIndex = new HashMap<>();
+        for (int i = 0; i < favored.size(); i++) {
+            favoredToIndex.put(favored.get(i), Integer.valueOf(i));
         }
 
+        final IntList unfavoured = new IntList();
         final int[] tokens = new int[band.length];
         for (int i = 0; i < band.length; i++) {
-            final Integer favouredIndex = favouredToIndex.get(Integer.valueOf(band[i]));
+            final Integer favouredIndex = favoredToIndex.get(Integer.valueOf(band[i]));
             if (favouredIndex == null) {
                 tokens[i] = 0;
                 unfavoured.add(band[i]);
@@ -379,8 +381,8 @@ public abstract class BandSet {
                 tokens[i] = favouredIndex.intValue() + 1;
             }
         }
-        favoured.add(favoured.get(favoured.size() - 1)); // repeat last value
-        final int[] favouredBand = integerListToArray(favoured);
+        favored.add(favored.get(favored.size() - 1)); // repeat last value
+        final int[] favouredBand = integerListToArray(favored);
         final int[] unfavouredBand = unfavoured.toArray();
 
         // Analyse the three bands to get the best codec
@@ -391,7 +393,7 @@ public abstract class BandSet {
         int l = 0;
         Codec tokenCodec = null;
         byte[] tokensEncoded;
-        final int k = favoured.size() - 1;
+        final int k = favored.size() - 1;
         if (k < 256) {
             tdefL = 1;
             tokensEncoded = Codec.BYTE1.encode(tokens);
@@ -516,9 +518,7 @@ public abstract class BandSet {
         final BHSDCodec hiCodec, final boolean haveHiFlags) throws Pack200Exception {
         if (!haveHiFlags) {
             final int[] loBits = new int[flags.length];
-            for (int i = 0; i < flags.length; i++) {
-                loBits[i] = (int) flags[i];
-            }
+            Arrays.setAll(loBits, i -> (int) flags[i]);
             return encodeBandInt(name, loBits, loCodec);
         }
         final int[] hiBits = new int[flags.length];
@@ -543,11 +543,7 @@ public abstract class BandSet {
      * @return conversion result.
      */
     protected int[] integerListToArray(final List<Integer> integerList) {
-        final int[] array = new int[integerList.size()];
-        for (int i = 0; i < array.length; i++) {
-            array[i] = integerList.get(i).intValue();
-        }
-        return array;
+        return integerList.stream().mapToInt(Integer::intValue).toArray();
     }
 
     /**
@@ -557,11 +553,7 @@ public abstract class BandSet {
      * @return conversion result.
      */
     protected long[] longListToArray(final List<Long> longList) {
-        final long[] array = new long[longList.size()];
-        for (int i = 0; i < array.length; i++) {
-            array[i] = longList.get(i).longValue();
-        }
-        return array;
+        return longList.stream().mapToLong(Long::longValue).toArray();
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java b/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java
index 27594af7..1b5fec94 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/BcBands.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.objectweb.asm.Label;
 
@@ -195,19 +196,11 @@ public class BcBands extends BandSet {
     }
 
     private List<Integer> getIndexInClass(final List<CPMethodOrField> cPMethodOrFieldList) {
-        final List<Integer> indices = new ArrayList<>(cPMethodOrFieldList.size());
-        for (int i = 0; i < cPMethodOrFieldList.size(); i++) {
-            indices.add(Integer.valueOf(cPMethodOrFieldList.get(i).getIndexInClass()));
-        }
-        return indices;
+        return cPMethodOrFieldList.stream().collect(Collectors.mapping(CPMethodOrField::getIndexInClass, Collectors.toList()));
     }
 
     private List<Integer> getIndexInClassForConstructor(final List<CPMethodOrField> cPMethodList) {
-        final List<Integer> indices = new ArrayList<>(cPMethodList.size());
-        for (int i = 0; i < cPMethodList.size(); i++) {
-            indices.add(Integer.valueOf(cPMethodList.get(i).getIndexInClassForConstructor()));
-        }
-        return indices;
+        return cPMethodList.stream().collect(Collectors.mapping(CPMethodOrField::getIndexInClassForConstructor, Collectors.toList()));
     }
 
     public void visitEnd() {
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java b/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java
index 6730445f..09b94152 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/ClassBands.java
@@ -19,6 +19,7 @@ package org.apache.commons.compress.harmony.pack200;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -200,9 +201,7 @@ public class ClassBands extends BandSet {
 		class_super[index] = cpBands.getCPClass(superName);
 		class_interface_count[index] = interfaces.length;
 		class_interface[index] = new CPClass[interfaces.length];
-		for (int i = 0; i < interfaces.length; i++) {
-			class_interface[index][i] = cpBands.getCPClass(interfaces[i]);
-		}
+        Arrays.setAll(class_interface[index], i -> cpBands.getCPClass(interfaces[i]));
 		major_versions[index] = major;
 		class_flags[index] = flags;
 		if (!anySyntheticClasses && ((flags & (1 << 12)) != 0)
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/CpBands.java b/src/main/java/org/apache/commons/compress/harmony/pack200/CpBands.java
index 8c982cea..c951db69 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/CpBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/CpBands.java
@@ -138,16 +138,12 @@ public class CpBands extends BandSet {
         final int[] cpUtf8Chars = new int[chars.size()];
         final int[] cpUtf8BigSuffix = new int[bigSuffix.size()];
         final int[][] cpUtf8BigChars = new int[bigSuffix.size()][];
-        for (int i = 0; i < cpUtf8Chars.length; i++) {
-            cpUtf8Chars[i] = chars.get(i).charValue();
-        }
+        Arrays.setAll(cpUtf8Chars, i -> chars.get(i).charValue());
         for (int i = 0; i < cpUtf8BigSuffix.length; i++) {
             final int numBigChars = bigSuffix.get(i).intValue();
             cpUtf8BigSuffix[i] = numBigChars;
             cpUtf8BigChars[i] = new int[numBigChars];
-            for (int j = 0; j < numBigChars; j++) {
-                cpUtf8BigChars[i][j] = bigChars.remove(0).charValue();
-            }
+            Arrays.setAll(cpUtf8BigChars[i], j -> bigChars.remove(0).charValue());
         }
 
         byte[] encodedBand = encodeBandInt("cpUtf8Prefix", cpUtf8Prefix, Codec.DELTA5);
@@ -283,9 +279,7 @@ public class CpBands extends BandSet {
             i++;
         }
         final int[] cpSignatureClasses = new int[classes.size()];
-        for (int j = 0; j < cpSignatureClasses.length; j++) {
-            cpSignatureClasses[j] = classes.get(j).getIndex();
-        }
+        Arrays.setAll(cpSignatureClasses, j -> classes.get(j).getIndex());
 
         byte[] encodedBand = encodeBandInt("cpSignatureForm", cpSignatureForm, Codec.DELTA5);
         out.write(encodedBand);
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java b/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java
index 1ff665a5..116e427c 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/FileBands.java
@@ -18,6 +18,7 @@ package org.apache.commons.compress.harmony.pack200;
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -99,9 +100,7 @@ public class FileBands extends BandSet {
         }
 
         if (isLatest) {
-            for (int index = 0; index < size; index++) {
-                file_modtime[index] = latestModtime;
-            }
+            Arrays.fill(file_modtime, latestModtime);
         }
     }
 
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/MetadataBandGroup.java b/src/main/java/org/apache/commons/compress/harmony/pack200/MetadataBandGroup.java
index 95a1efa6..e28535ab 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/MetadataBandGroup.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/MetadataBandGroup.java
@@ -200,11 +200,7 @@ public class MetadataBandGroup extends BandSet {
     }
 
     private int[] tagListToArray(final List<String> list) {
-        final int[] ints = new int[list.size()];
-        for (int i = 0; i < ints.length; i++) {
-            ints[i] = list.get(i).charAt(0);
-        }
-        return ints;
+        return list.stream().mapToInt(s -> s.charAt(0)).toArray();
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java b/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
index 1c8d95c7..95f61d07 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/Segment.java
@@ -40,7 +40,7 @@ import org.objectweb.asm.Type;
  */
 public class Segment extends ClassVisitor {
 
-     public static int ASM_API = Opcodes.ASM4; /* see https://asm.ow2.io/javadoc/org/objectweb/asm/Opcodes.html#ASM4 */
+    public static int ASM_API = Opcodes.ASM4; /* see https://asm.ow2.io/javadoc/org/objectweb/asm/Opcodes.html#ASM4 */
 
     public Segment() {
         super(ASM_API);
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java
index f10be1a4..f1a304fc 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/BandSet.java
@@ -298,8 +298,7 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPDouble[] result = new CPDouble[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = segment.getCpBands().cpDoubleValue(index);
+            result[i1] = segment.getCpBands().cpDoubleValue(indices[i1]);
         }
         return result;
     }
@@ -309,8 +308,7 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPFloat[] result = new CPFloat[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = segment.getCpBands().cpFloatValue(index);
+            result[i1] = segment.getCpBands().cpFloatValue(indices[i1]);
         }
         return result;
     }
@@ -371,8 +369,7 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPString[] result = new CPString[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = segment.getCpBands().cpStringValue(index);
+            result[i1] = segment.getCpBands().cpStringValue(indices[i1]);
         }
         return result;
     }
@@ -383,8 +380,7 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPInterfaceMethodRef[] result = new CPInterfaceMethodRef[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = cpBands.cpIMethodValue(index);
+            result[i1] = cpBands.cpIMethodValue(indices[i1]);
         }
         return result;
     }
@@ -395,8 +391,7 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPMethodRef[] result = new CPMethodRef[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = cpBands.cpMethodValue(index);
+            result[i1] = cpBands.cpMethodValue(indices[i1]);
         }
         return result;
     }
@@ -430,8 +425,7 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPUTF8[] result = new CPUTF8[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = segment.getCpBands().cpSignatureValue(index);
+            result[i1] = segment.getCpBands().cpSignatureValue(indices[i1]);
         }
         return result;
     }
@@ -447,8 +441,7 @@ public abstract class BandSet {
         final CPUTF8[] result1 = new CPUTF8[sum];
         final int[] indices = decodeBandInt(name, in, codec, sum);
         for (int i1 = 0; i1 < sum; i1++) {
-            final int index = indices[i1];
-            result1[i1] = segment.getCpBands().cpSignatureValue(index);
+            result1[i1] = segment.getCpBands().cpSignatureValue(indices[i1]);
         }
         int pos = 0;
         for (int i = 0; i < counts.length; i++) {
@@ -465,17 +458,14 @@ public abstract class BandSet {
         final int[] indices = decodeBandInt(name, in, codec, count);
         final CPClass[] result = new CPClass[indices.length];
         for (int i1 = 0; i1 < count; i1++) {
-            final int index = indices[i1];
-            result[i1] = segment.getCpBands().cpClassValue(index);
+            result[i1] = segment.getCpBands().cpClassValue(indices[i1]);
         }
         return result;
     }
 
     protected String[] getReferences(final int[] ints, final String[] reference) {
         final String[] result = new String[ints.length];
-        for (int i = 0; i < result.length; i++) {
-            result[i] = reference[ints[i]];
-        }
+        Arrays.setAll(result, i -> reference[ints[i]]);
         return result;
     }
 
@@ -485,7 +475,6 @@ public abstract class BandSet {
             result[i] = new String[ints[i].length];
             for (int j = 0; j < result[i].length; j++) {
                 result[i][j] = reference[ints[i][j]];
-
             }
         }
         return result;
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/ClassBands.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/ClassBands.java
index c38c077c..bf0fa5c9 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/ClassBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/ClassBands.java
@@ -19,6 +19,7 @@ package org.apache.commons.compress.harmony.unpack200;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.compress.harmony.pack200.Codec;
@@ -427,9 +428,7 @@ public class ClassBands extends BandSet {
 
         // Prepare empty attribute lists
         classAttributes = new ArrayList[classCount];
-        for (int i = 0; i < classCount; i++) {
-            classAttributes[i] = new ArrayList<>();
-        }
+        Arrays.setAll(classAttributes, i -> new ArrayList<>());
 
         classFlags = parseFlags("class_flags", in, classCount, Codec.UNSIGNED5, options.hasClassFlagsHi());
         final int classAttrCount = SegmentUtils.countBit16(classFlags);
@@ -701,9 +700,7 @@ public class ClassBands extends BandSet {
         final int codeFlagsCount = allCodeHasFlags ? codeCount : codeSpecialHeader;
 
         codeAttributes = new List[codeFlagsCount];
-        for (int i = 0; i < codeAttributes.length; i++) {
-            codeAttributes[i] = new ArrayList<>();
-        }
+        Arrays.setAll(codeAttributes, i -> new ArrayList<>());
         parseCodeAttrBands(in, codeFlagsCount);
     }
 
@@ -988,9 +985,7 @@ public class ClassBands extends BandSet {
             AttributeLayout.CONTEXT_METHOD);
         final AttributeLayout[] rxaLayouts = {rvaLayout, riaLayout, rvpaLayout, ripaLayout, adLayout};
 
-        for (int i = 0; i < rxaLayouts.length; i++) {
-            rxaCounts[i] = SegmentUtils.countMatches(methodFlags, rxaLayouts[i]);
-        }
+        Arrays.setAll(rxaCounts, i -> SegmentUtils.countMatches(methodFlags, rxaLayouts[i]));
         final int[] backwardsCalls = new int[5];
         int methodAttrIndex = 0;
         for (int i = 0; i < backwardsCalls.length; i++) {
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/CpBands.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/CpBands.java
index e9220197..c6734388 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/CpBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/CpBands.java
@@ -19,6 +19,7 @@ package org.apache.commons.compress.harmony.unpack200;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -186,9 +187,7 @@ public class CpBands extends BandSet {
         final int cpDoubleCount = header.getCpDoubleCount();
         final long[] band = parseFlags("cp_Double", in, cpDoubleCount, Codec.UDELTA5, Codec.DELTA5);
         cpDouble = new double[band.length];
-        for (int i = 0; i < band.length; i++) {
-            cpDouble[i] = Double.longBitsToDouble(band[i]);
-        }
+        Arrays.setAll(cpDouble, i -> Double.longBitsToDouble(band[i]));
     }
 
     /**
@@ -339,9 +338,7 @@ public class CpBands extends BandSet {
         final int cpStringCount = header.getCpStringCount();
         cpStringInts = decodeBandInt("cp_String", in, Codec.UDELTA5, cpStringCount);
         cpString = new String[cpStringCount];
-        for (int i = 0; i < cpStringCount; i++) {
-            cpString[i] = cpUTF8[cpStringInts[i]];
-        }
+        Arrays.setAll(cpString, i -> cpUTF8[cpStringInts[i]]);
     }
 
     private void parseCpUtf8(final InputStream in) throws IOException, Pack200Exception {
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/IcBands.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/IcBands.java
index 89a2a7ea..410cda79 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/IcBands.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/IcBands.java
@@ -224,12 +224,7 @@ public class IcBands extends BandSet {
             return index1.compareTo(index2);
         });
 
-        final IcTuple[] relevantTuplesArray = new IcTuple[relevantTuples.size()];
-        for (int i = 0; i < relevantTuplesArray.length; i++) {
-            relevantTuplesArray[i] = relevantTuples.get(i);
-        }
-
-        return relevantTuplesArray;
+        return relevantTuples.toArray(IcTuple.EMPTY_ARRAY);
     }
 
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/IcTuple.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/IcTuple.java
index df6c0b65..0ee5fc20 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/IcTuple.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/IcTuple.java
@@ -29,6 +29,7 @@ import java.util.List;
  */
 public class IcTuple {
 
+    private static final String[] EMPTY_STRING_ARRAY = new String[] {};
     private final int cIndex;
     private final int c2Index;
     private final int nIndex;
@@ -65,6 +66,8 @@ public class IcTuple {
     }
 
     public static final int NESTED_CLASS_FLAG = 0x00010000;
+    static final IcTuple[] EMPTY_ARRAY = {};
+
     protected String C; // this class
     protected int F; // flags
     protected String C2; // outer class
@@ -122,11 +125,7 @@ public class IcTuple {
                 resultList.add(className.substring(start));
             }
         }
-        final String[] result = new String[resultList.size()];
-        for (int i = 0; i < resultList.size(); i++) {
-            result[i] = resultList.get(i);
-        }
-        return result;
+        return resultList.toArray(EMPTY_STRING_ARRAY);
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/MetadataBandGroup.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/MetadataBandGroup.java
index 0b2307a2..b7b13845 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/MetadataBandGroup.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/MetadataBandGroup.java
@@ -163,9 +163,7 @@ public class MetadataBandGroup {
     private Attribute getAttribute(final int numAnnotations, final CPUTF8[] types, final int[] pairCounts,
         final Iterator<CPUTF8> namesIterator) {
         final Annotation[] annotations = new Annotation[numAnnotations];
-        for (int i = 0; i < numAnnotations; i++) {
-            annotations[i] = getAnnotation(types[i], pairCounts[i], namesIterator);
-        }
+        Arrays.setAll(annotations, i -> getAnnotation(types[i], pairCounts[i], namesIterator));
         return new RuntimeVisibleorInvisibleAnnotationsAttribute(type.equals("RVA") ? rvaUTF8 : riaUTF8, annotations);
     }
 
@@ -175,9 +173,7 @@ public class MetadataBandGroup {
             final int numAnnotations = anno_N[anno_N_Index++];
             final int[] pairCounts = pair_N[pair_N_Index++];
             final Annotation[] annotations = new Annotation[numAnnotations];
-            for (int j = 0; j < annotations.length; j++) {
-                annotations[j] = getAnnotation(type_RS[anno_N_Index - 1][j], pairCounts[j], namesIterator);
-            }
+            Arrays.setAll(annotations, j -> getAnnotation(type_RS[anno_N_Index - 1][j], pairCounts[j], namesIterator));
             parameter_annotations[i] = new ParameterAnnotation(annotations);
         }
         return new RuntimeVisibleorInvisibleParameterAnnotationsAttribute(type.equals("RVPA") ? rvpaUTF8 : ripaUTF8,
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/Segment.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/Segment.java
index 6564cc21..6ac2ee43 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/Segment.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/Segment.java
@@ -23,7 +23,9 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -326,10 +328,7 @@ public class Segment {
         }
 
         // eliminate "duplicates"
-        for (int index = 0; index < duplicates.size(); index++) {
-            final IcTuple tuple = duplicates.get(index);
-            result.remove(tuple);
-        }
+        duplicates.forEach(result::remove);
 
         return result;
     }
@@ -566,7 +565,7 @@ public class Segment {
     }
 
     public void setLogStream(final OutputStream logStream) {
-        this.logStream = new PrintWriter(logStream);
+        this.logStream = new PrintWriter(new OutputStreamWriter(logStream, Charset.defaultCharset()), false);
     }
 
     public void log(final int logLevel, final String message) {
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/BCIRenumberedAttribute.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/BCIRenumberedAttribute.java
index 14941724..a9f3d75d 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/BCIRenumberedAttribute.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/BCIRenumberedAttribute.java
@@ -18,6 +18,7 @@ package org.apache.commons.compress.harmony.unpack200.bytecode;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.compress.harmony.pack200.Pack200Exception;
@@ -68,9 +69,7 @@ public abstract class BCIRenumberedAttribute extends Attribute {
         }
         renumbered = true;
         final int[] startPCs = getStartPCs();
-        for (int index = 0; index < startPCs.length; index++) {
-            startPCs[index] = byteCodeOffsets.get(startPCs[index]).intValue();
-        }
+        Arrays.setAll(startPCs, i -> byteCodeOffsets.get(startPCs[i]).intValue());
     }
 
 }
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/InnerClassesAttribute.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/InnerClassesAttribute.java
index 358a3944..a8a5c39a 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/InnerClassesAttribute.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/InnerClassesAttribute.java
@@ -125,11 +125,7 @@ public class InnerClassesAttribute extends Attribute {
 
     @Override
     protected ClassFileEntry[] getNestedClassFileEntries() {
-        final ClassFileEntry[] result = new ClassFileEntry[nestedClassFileEntries.size()];
-        for (int index = 0; index < result.length; index++) {
-            result[index] = nestedClassFileEntries.get(index);
-        }
-        return result;
+        return nestedClassFileEntries.toArray(ClassFileEntry.NONE);
     }
 
     @Override
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java
index 4612d451..c1c71ae7 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleAnnotationsAttribute.java
@@ -77,10 +77,6 @@ public class RuntimeVisibleorInvisibleAnnotationsAttribute extends AnnotationsAt
         for (Annotation annotation : annotations) {
             nested.addAll(annotation.getClassFileEntries());
         }
-        final ClassFileEntry[] nestedEntries = new ClassFileEntry[nested.size()];
-        for (int i = 0; i < nestedEntries.length; i++) {
-            nestedEntries[i] = (ClassFileEntry) nested.get(i);
-        }
-        return nestedEntries;
+        return nested.toArray(ClassFileEntry.NONE);
     }
 }
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java
index d9be8098..28537af7 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/RuntimeVisibleorInvisibleParameterAnnotationsAttribute.java
@@ -118,11 +118,7 @@ public class RuntimeVisibleorInvisibleParameterAnnotationsAttribute extends Anno
         for (ParameterAnnotation parameter_annotation : parameter_annotations) {
             nested.addAll(parameter_annotation.getClassFileEntries());
         }
-        final ClassFileEntry[] nestedEntries = new ClassFileEntry[nested.size()];
-        for (int i = 0; i < nestedEntries.length; i++) {
-            nestedEntries[i] = (ClassFileEntry) nested.get(i);
-        }
-        return nestedEntries;
+        return nested.toArray(ClassFileEntry.NONE);
     }
 
 }
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java
index d4def4b3..fb55a729 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/LookupSwitchForm.java
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.compress.harmony.unpack200.bytecode.forms;
 
+import java.util.Arrays;
+
 import org.apache.commons.compress.harmony.unpack200.bytecode.ByteCode;
 import org.apache.commons.compress.harmony.unpack200.bytecode.OperandManager;
 
@@ -39,13 +41,9 @@ public class LookupSwitchForm extends SwitchForm {
         final int case_count = operandManager.nextCaseCount();
         final int default_pc = operandManager.nextLabel();
         final int[] case_values = new int[case_count];
-        for (int index = 0; index < case_count; index++) {
-            case_values[index] = operandManager.nextCaseValues();
-        }
+        Arrays.setAll(case_values, i -> operandManager.nextCaseValues());
         final int[] case_pcs = new int[case_count];
-        for (int index = 0; index < case_count; index++) {
-            case_pcs[index] = operandManager.nextLabel();
-        }
+        Arrays.setAll(case_pcs, i -> operandManager.nextLabel());
 
         final int[] labelsArray = new int[case_count + 1];
         labelsArray[0] = default_pc;
diff --git a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/TableSwitchForm.java b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/TableSwitchForm.java
index f28e8f97..1c77c7cb 100644
--- a/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/TableSwitchForm.java
+++ b/src/main/java/org/apache/commons/compress/harmony/unpack200/bytecode/forms/TableSwitchForm.java
@@ -16,6 +16,8 @@
  */
 package org.apache.commons.compress.harmony.unpack200.bytecode.forms;
 
+import java.util.Arrays;
+
 import org.apache.commons.compress.harmony.unpack200.bytecode.ByteCode;
 import org.apache.commons.compress.harmony.unpack200.bytecode.OperandManager;
 
@@ -42,9 +44,7 @@ public class TableSwitchForm extends SwitchForm {
         case_value = operandManager.nextCaseValues();
 
         final int[] case_pcs = new int[case_count];
-        for (int index = 0; index < case_count; index++) {
-            case_pcs[index] = operandManager.nextLabel();
-        }
+        Arrays.setAll(case_pcs, i -> operandManager.nextLabel());
 
         final int[] labelsArray = new int[case_count + 1];
         labelsArray[0] = default_pc;
diff --git a/src/main/java/org/apache/commons/compress/utils/ArchiveUtils.java b/src/main/java/org/apache/commons/compress/utils/ArchiveUtils.java
index c464c8cb..2da6a2ff 100644
--- a/src/main/java/org/apache/commons/compress/utils/ArchiveUtils.java
+++ b/src/main/java/org/apache/commons/compress/utils/ArchiveUtils.java
@@ -259,9 +259,7 @@ public class ArchiveUtils {
         final char[] cs = s.toCharArray();
         final char[] chars = cs.length <= MAX_SANITIZED_NAME_LENGTH ? cs : Arrays.copyOf(cs, MAX_SANITIZED_NAME_LENGTH);
         if (cs.length > MAX_SANITIZED_NAME_LENGTH) {
-            for (int i = MAX_SANITIZED_NAME_LENGTH - 3; i < MAX_SANITIZED_NAME_LENGTH; i++) {
-                chars[i] = '.';
-            }
+            Arrays.fill(chars, MAX_SANITIZED_NAME_LENGTH - 3, MAX_SANITIZED_NAME_LENGTH, '.');
         }
         final StringBuilder sb = new StringBuilder();
         for (final char c : chars) {