Add remember me capabilities to RAP
[lgpl/argeo-commons.git] / basic / runtime / org.argeo.basic.nodeps / src / main / java / org / argeo / StreamUtils.java
index d2ccdb737af9e2bad7e00907bd871f118e7a9449..c94950d194cd97bb6a5f2bb865890cd4a2c63fa6 100644 (file)
@@ -10,6 +10,10 @@ import java.io.Writer;
 public class StreamUtils {
        private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
 
+       /*
+        * APACHE COMMONS IO (inspired)
+        */
+
        /** @return the number of bytes */
        public static Long copy(InputStream in, OutputStream out)
                        throws IOException {
@@ -75,8 +79,90 @@ public class StreamUtils {
                        }
        }
 
-       private StreamUtils() {
+       /*
+        * APACHE COMMONS CODEC (forked)
+        */
+       /**
+        * Used to build output as Hex
+        */
+       private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5',
+                       '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+       /**
+        * Used to build output as Hex
+        */
+       private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5',
+                       '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 
+       /**
+        * Converts an array of bytes into a String representing the hexadecimal
+        * values of each byte in order. The returned String will be double the
+        * length of the passed array, as it takes two characters to represent any
+        * given byte.
+        * 
+        * @param data
+        *            a byte[] to convert to Hex characters
+        * @return A String containing hexadecimal characters
+        * @since 1.4
+        */
+       public static String encodeHexString(byte[] data) {
+               return new String(encodeHex(data));
+       }
+
+       /**
+        * Converts an array of bytes into an array of characters representing the
+        * hexadecimal values of each byte in order. The returned array will be
+        * double the length of the passed array, as it takes two characters to
+        * represent any given byte.
+        * 
+        * @param data
+        *            a byte[] to convert to Hex characters
+        * @return A char[] containing hexadecimal characters
+        */
+       public static char[] encodeHex(byte[] data) {
+               return encodeHex(data, true);
+       }
+
+       /**
+        * Converts an array of bytes into an array of characters representing the
+        * hexadecimal values of each byte in order. The returned array will be
+        * double the length of the passed array, as it takes two characters to
+        * represent any given byte.
+        * 
+        * @param data
+        *            a byte[] to convert to Hex characters
+        * @param toLowerCase
+        *            <code>true</code> converts to lowercase, <code>false</code> to
+        *            uppercase
+        * @return A char[] containing hexadecimal characters
+        * @since 1.4
+        */
+       public static char[] encodeHex(byte[] data, boolean toLowerCase) {
+               return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
+       }
+
+       /**
+        * Converts an array of bytes into an array of characters representing the
+        * hexadecimal values of each byte in order. The returned array will be
+        * double the length of the passed array, as it takes two characters to
+        * represent any given byte.
+        * 
+        * @param data
+        *            a byte[] to convert to Hex characters
+        * @param toDigits
+        *            the output alphabet
+        * @return A char[] containing hexadecimal characters
+        * @since 1.4
+        */
+       protected static char[] encodeHex(byte[] data, char[] toDigits) {
+               int l = data.length;
+               char[] out = new char[l << 1];
+               // two characters form the hex value.
+               for (int i = 0, j = 0; i < l; i++) {
+                       out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
+                       out[j++] = toDigits[0x0F & data[i]];
+               }
+               return out;
        }
 
 }