compareToIgnoreSpaces(byte[] byteArray, char[] anotherCharArray) {
    public static int compareToIgnoreSpaces(byte[] byteArray, char[] anotherCharArray) {
         if (byteArray == null && anotherCharArray == null) {
             return 0;
         } else if (byteArray == null) {
             return -1;
         } else if (anotherCharArray == null) {
             return 1;
         }
         if (byteArray.length == 0 && anotherCharArray.length == 0) {
             return 0;
         } else if (byteArray.length == 0) {
             return -1;
         } else if (anotherCharArray.length == 0) {
             return 1;
         }
         // we only ignore end white spaces
         int startIndex0 = 0;
         int endIndex0 = byteArray.length - 1;
         if (startIndex0 < byteArray.length) {
             // charArray has non whitespace char
             while (endIndex0 >= 0) {
                 char c = (char) (byteArray[endIndex0] & 0xFF);
                 if (c == ' ') {
                     endIndex0--;
                 } else {
                     break;
                 }
             }
         }
         int startIndex1 = 0;
         int endIndex1 = anotherCharArray.length - 1;
         if (startIndex1 < anotherCharArray.length) {
             // anotherCharArray has non whitespace char
             while (endIndex1 >= 0) {
                 char c = anotherCharArray[endIndex1];
                 if (c == ' ') {
                     endIndex1--;
                 } else {
                     break;
                 }
             }
         }
         int len1 = endIndex0 - startIndex0 + 1;
         int len2 = endIndex1 - startIndex1 + 1;
         int n = ((len1 <= len2) ? len1 : len2);
         for (int i = 0; i < n; i++) {
             char c1 = (char) (byteArray[startIndex0 + i] & 0xFF);
             char c2 = anotherCharArray[startIndex1 + i];
             if (c1 != c2) {
                 return c1 - c2;
             }
         }
         return len1 - len2;        
     }