]> source.dussan.org Git - poi.git/commitdiff
replace List<Byte> with ByteArrayOutputStream to avoid boxing/unboxing and repeated...
authorAxel Howind <axh@apache.org>
Thu, 22 Feb 2024 20:48:04 +0000 (20:48 +0000)
committerAxel Howind <axh@apache.org>
Thu, 22 Feb 2024 20:48:04 +0000 (20:48 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1915958 13f79535-47bb-0310-9956-ffa450edef68

poi/src/main/java/org/apache/poi/util/HexRead.java

index 2da79c6c236e35bd61482f7d364aa87ba6fe95d2..4a1b7a1c4ed03ac16a135b3de3ddb5377d52e64b 100644 (file)
@@ -94,42 +94,38 @@ public class HexRead {
     {
         int characterCount = 0;
         byte b = (byte) 0;
-        List<Byte> bytes = new ArrayList<>();
-        final char a = 'a' - 10;
-        final char A = 'A' - 10;
-        while ( true ) {
-            int count = stream.read();
-            int digitValue = -1;
-            if ( '0' <= count && count <= '9' ) {
-                digitValue = count - '0';
-            } else if ( 'A' <= count && count <= 'F' ) {
-                digitValue = count - A;
-            } else if ( 'a' <= count && count <= 'f' ) {
-                digitValue = count - a;
-            } else if ( '#' == count ) {
-                readToEOL( stream );
-            } else if ( -1 == count || eofChar == count ) {
-                break;
-            }
-            // else: ignore the character
+        try (ByteArrayOutputStream bytes = new ByteArrayOutputStream()) {
+            final char a = 'a' - 10;
+            final char A = 'A' - 10;
+            while (true) {
+                int count = stream.read();
+                int digitValue = -1;
+                if ('0' <= count && count <= '9') {
+                    digitValue = count - '0';
+                } else if ('A' <= count && count <= 'F') {
+                    digitValue = count - A;
+                } else if ('a' <= count && count <= 'f') {
+                    digitValue = count - a;
+                } else if ('#' == count) {
+                    readToEOL(stream);
+                } else if (-1 == count || eofChar == count) {
+                    break;
+                }
+                // else: ignore the character
 
-            if (digitValue != -1) {
-                b <<= 4;
-                b += (byte) digitValue;
-                characterCount++;
-                if ( characterCount == 2 ) {
-                    bytes.add( Byte.valueOf( b ) );
-                    characterCount = 0;
-                    b = (byte) 0;
+                if (digitValue != -1) {
+                    b <<= 4;
+                    b += (byte) digitValue;
+                    characterCount++;
+                    if (characterCount == 2) {
+                        bytes.write(b);
+                        characterCount = 0;
+                        b = (byte) 0;
+                    }
                 }
             }
+            return bytes.toByteArray();
         }
-        Byte[] polished = bytes.toArray(new Byte[0]);
-        byte[] rval = new byte[polished.length];
-        for ( int j = 0; j < polished.length; j++ ) {
-            rval[j] = polished[j].byteValue();
-        }
-        return rval;
     }
 
     static public byte[] readFromString(String data) {