Merge "Change StreamUtil from DatatypeConverter to bytesToHexString"
diff --git a/src/com/android/tradefed/util/StreamUtil.java b/src/com/android/tradefed/util/StreamUtil.java
index eee61b4..a904fd6 100644
--- a/src/com/android/tradefed/util/StreamUtil.java
+++ b/src/com/android/tradefed/util/StreamUtil.java
@@ -33,11 +33,10 @@
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import java.util.Objects;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipOutputStream;
-import javax.xml.bind.DatatypeConverter;
-
/**
* Utility class for managing input streams.
*/
@@ -309,7 +308,29 @@
// Read through the stream to update digest.
}
input.close();
- String md5 = DatatypeConverter.printHexBinary(md.digest()).toLowerCase();
+ String md5 = bytesToHexString(md.digest());
return md5;
}
+
+ private static final char[] HEX_CHARS = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+ };
+
+ /**
+ * Converts a byte array into a String of hexadecimal characters.
+ *
+ * @param bytes an array of bytes
+ * @return hex string representation of bytes array
+ */
+ private static String bytesToHexString(byte[] bytes) {
+ Objects.requireNonNull(bytes);
+ StringBuilder sb = new StringBuilder(2 * bytes.length);
+ for (int i = 0; i < bytes.length; i++) {
+ int b = 0x0f & (bytes[i] >> 4);
+ sb.append(HEX_CHARS[b]);
+ b = 0x0f & bytes[i];
+ sb.append(HEX_CHARS[b]);
+ }
+ return sb.toString();
+ }
}