FileDocCategorySizeDatePackage
Array.javaAPI DocAndroid 1.5 API3661Wed May 06 22:41:06 BST 2009org.apache.harmony.security.utils

Array

public class Array extends Object
Utility class for arrays

Fields Summary
Constructors Summary
private Array()

    
Methods Summary
public static java.lang.StringtoString(byte[] array, java.lang.String prefix)
Represents array as String for printing. Array length can be up to 32767

param
array to be represented as String
return
String representation of the array

        // Prefixes to be added to the offset values
        // in <code>String toString(byte[], String)</code> method
        final String[] offsetPrefix = {
                "", //$NON-NLS-1$
                "000", //$NON-NLS-1$
                "00", //$NON-NLS-1$
                "0", //$NON-NLS-1$
                "" //$NON-NLS-1$
        };
        StringBuilder sb = new StringBuilder();
        StringBuilder charForm = new StringBuilder();
        int i=0;
        for (i=0; i<array.length; i++) {
            if (i%16 == 0) {
                sb.append(prefix);
                // put offset
                String offset = Integer.toHexString(i);
                sb.append(offsetPrefix[offset.length()]);
                sb.append(offset);
                // clear char form for new line
                charForm.delete(0, charForm.length());
            }
            // put delimiter
            sb.append(' ");
            // put current byte
            int currentByte = (0xff & array[i]);
            String hexTail = Integer.toHexString(currentByte);
            if (hexTail.length() == 1) {
                sb.append('0");
            }
            sb.append(hexTail);
            // form character representation part
            char currentChar = (char)(currentByte & 0xffff);
            // FIXME if needed (how to distinguish PRINTABLE chars?)
            charForm.append(
                    (Character.isISOControl(currentChar) ? '." : currentChar));
            // Add additional delimiter for each 8 values
            if ((i+1)%8 == 0) {
                sb.append(' ");
            }
            // Add character representation for each line
            if ((i+1)%16 == 0) {
                sb.append(' ");
                sb.append(charForm.toString());
                sb.append('\n");
            }
        }
        // form last line
        if (i%16 != 0) {
            int ws2add = 16 - i%16;
            for (int j=0; j<ws2add; j++) {
                sb.append("   "); //$NON-NLS-1$
            }
            if (ws2add > 8) {
                sb.append(' ");
            }
            sb.append("  "); //$NON-NLS-1$
            sb.append(charForm.toString());
            sb.append('\n");
        }
        return sb.toString();