1 16 package scriptella.driver.ldap.ldif; 17 18 import scriptella.util.IOUtils; 19 20 import java.io.IOException ; 21 import java.io.InputStream ; 22 import java.io.UnsupportedEncodingException ; 23 24 31 class Utils { 32 33 private static final byte[] HEX_CHAR = new byte[] 34 { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; 35 36 37 private Utils() { 38 } 39 40 53 public static boolean isCharASCII( char[] chars, int index, char car ) 54 { 55 if ( ( chars == null ) || ( chars.length == 0 ) || ( index < 0 ) || ( index >= chars.length ) ) 56 { 57 return false; 58 } 59 else 60 { 61 return chars[index] == car; 62 } 63 } 64 65 72 public static String utf8ToString( byte[] bytes ) 73 { 74 if ( bytes == null ) 75 { 76 return ""; 77 } 78 79 try 80 { 81 return new String ( bytes, "UTF-8" ); 82 } 83 catch ( UnsupportedEncodingException uee ) 84 { 85 return ""; 86 } 87 } 88 89 90 public static final boolean[] DIGIT = 91 { 92 false, false, false, false, false, false, false, false, 93 false, false, false, false, false, false, false, false, 94 false, false, false, false, false, false, false, false, 95 false, false, false, false, false, false, false, false, 96 false, false, false, false, false, false, false, false, 97 false, false, false, false, false, false, false, false, 98 true, true, true, true, true, true, true, true, 99 true, true, false, false, false, false, false, false, 100 false, false, false, false, false, false, false, false, 101 false, false, false, false, false, false, false, false, 102 false, false, false, false, false, false, false, false, 103 false, false, false, false, false, false, false, false, 104 false, false, false, false, false, false, false, false, 105 false, false, false, false, false, false, false, false, 106 false, false, false, false, false, false, false, false, 107 false, false, false, false, false, false, false, false 108 }; 109 110 111 121 public static boolean isDigit( char[] chars, int index ) 122 { 123 if ( ( chars == null ) || ( chars.length == 0 ) || ( index < 0 ) || ( index >= chars.length ) ) 124 { 125 return false; 126 } 127 else 128 { 129 return !((chars[index] > 127) || !DIGIT[chars[index]]); 130 } 131 } 132 133 134 136 148 public static byte[] base64Decode( char[] a_data ) 149 { 150 157 int l_tempLen = a_data.length; 158 for (char anA_data1 : a_data) { 159 if ((anA_data1 > 255) || s_codes[anA_data1] < 0) { 160 --l_tempLen; } 162 } 163 168 int l_len = ( l_tempLen / 4 ) * 3; 169 170 if ( ( l_tempLen % 4 ) == 3 ) 171 { 172 l_len += 2; 173 } 174 175 if ( ( l_tempLen % 4 ) == 2 ) 176 { 177 l_len += 1; 178 } 179 180 byte[] l_out = new byte[l_len]; 181 182 int l_shift = 0; int l_accum = 0; int l_index = 0; 185 186 for (char anA_data : a_data) { 188 int l_value = (anA_data > 255) ? -1 : s_codes[anA_data]; 189 190 if (l_value >= 0) { 192 l_accum <<= 6; l_shift += 6; l_accum |= l_value; if (l_shift >= 8) { 197 l_shift -= 8; l_out[l_index++] = (byte) ((l_accum >> l_shift) & 0xff); 200 } 201 } 202 } 213 214 if ( l_index != l_out.length ) 216 { 217 throw new Error ( "Miscalculated data length (wrote " + l_index + " instead of " + l_out.length + ")" ); 218 } 219 220 return l_out; 221 } 222 223 224 private static byte[] s_codes = new byte[256]; 225 226 static 227 { 228 for ( int ii = 0; ii < 256; ii++ ) 229 { 230 s_codes[ii] = -1; 231 } 232 233 for ( int ii = 'A'; ii <= 'Z'; ii++ ) 234 { 235 s_codes[ii] = ( byte ) ( ii - 'A' ); 236 } 237 238 for ( int ii = 'a'; ii <= 'z'; ii++ ) 239 { 240 s_codes[ii] = ( byte ) ( 26 + ii - 'a' ); 241 } 242 243 for ( int ii = '0'; ii <= '9'; ii++ ) 244 { 245 s_codes[ii] = ( byte ) ( 52 + ii - '0' ); 246 } 247 248 s_codes['+'] = 62; 249 s_codes['/'] = 63; 250 } 251 252 259 public static String dumpBytes( byte[] buffer ) 260 { 261 if ( buffer == null ) 262 { 263 return ""; 264 } 265 266 StringBuilder sb = new StringBuilder (2+buffer.length*2); 267 268 for (byte b : buffer) { 269 sb.append("0x").append((char) (HEX_CHAR[(b & 0x00F0) >> 4])).append( 270 (char) (HEX_CHAR[b & 0x000F])).append(" "); 271 } 272 273 return sb.toString(); 274 } 275 276 public static byte[] toByteArray(InputStream is, long maxLength) throws IOException { 277 return IOUtils.toByteArray(is, maxLength); 278 } 279 280 281 282 283 284 285 286 287 } 288 | Popular Tags |