Smallest base64 decoder
That I’ve written so far anyway. I’m sure its possible to write a smaller one using perl or maybe even C, but this is the smallest Java decoder I’ve seen.
private final static char[] base64CharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" .toCharArray(); private final static byte[] base64RevCharMap = new byte[256]; static { for (byte i = 0; i < base64CharMap.length; i++) base64RevCharMap[base64CharMap[i]] = i; } /** * Decode a base64 encoded data back into a byte array * @param text base64 decoded data * @return binary */ public static byte[] base64(String text) { if (text == null) return null; char[] chars = text.trim().toCharArray(); int sind = 0, dind = 0, shl = 0; byte[] out = new byte[chars.length/4*3]; while (sind < chars.length && chars[sind+1] != '=') { out[dind++] = (byte) ( (base64RevCharMap[chars[sind++]] << (shl+2)) | (base64RevCharMap[chars[sind]] >>> (4-shl))); if ((shl = (shl + 2) % 6) == 0) sind++; } return Arrays.copyOf(out, dind); }
Now I need to work on my encoder, which is both a mess and way too big, unlike the decoder above which is just a mess 🙂
Update:
Removed wisestring (which was stupid in the first place) in favor of returning a proper byte array. Also cleaned up some syntax.
Thanks for this tool!