Base64使用【字母azAZ数字09和+/】这64个字符
编码原理是将3个字节转换成4个字节
(3 X 8) = 24 = (4 X 6)
先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了。
这样还不能保证得到的字符都是可见字符,为了达到此目的,Base64制定了一个编码表,进行统一的转换。
码表的大小为2^6=64,这也是Base64名称的由来。
当剩下的字符数量不足3个字节时,则应使用0进行填充,相应的,输出字符则使用‘=‘占位,因此编码后输出的文本末尾可能会出现1至2个‘=‘。
解码原理是将4个字节转换成3个字节
先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位,这样就还原了。
Base64编码表
0 A 9 J 17 R 26 a 34 i 43 r 52 0 60 8
1 B 10 K 18 S 27 b 35 j 44 s 53 1 61 9
2 C 11 L 19 T 28 c 36 k 45 t 54 2 62 +
3 D 12 M 20 U 29 d 37 l 46 u 55 3 63 /
4 E 13 N 21 V 30 e 38 m 47 v 56 4
5 F 14 O 22 W 31 f 39 n 48 w 57 5
6 G 15 P 23 X 32 g 40 o 49 x 58 6
7 H 16 Q 24 Y 33 h 41 p 50 y 59 7
8 I 25 Z 42 q 51 z
public class Base64Test {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "/白乾涛";
String charset = "UTF-8";
//Basic编码:是标准的BASE64编码,用于处理常规的需求
String encStr = Base64.getEncoder().encodeToString(str.getBytes(charset));
byte[] asBytes = Base64.getDecoder().decode(encStr);
System.out.println("编码【" + encStr + "】解码【" + new String(asBytes, charset) + "】"); //编码【L+eZveS5vua2mw==】解码【/白乾涛】
//URL编码:使用下划线替换URL里面的反斜线“/”
String encStr2 = Base64.getUrlEncoder().encodeToString(str.getBytes(charset));
byte[] asBytes2 = Base64.getUrlDecoder().decode(encStr2);
System.out.println("编码【" + encStr2 + "】解码【" + new String(asBytes2, charset) + "】"); //编码【L-eZveS5vua2mw==】解码【/白乾涛】
//MIME编码:使用基本的字母数字产生BASE64输出
String encStr3 = Base64.getMimeEncoder().encodeToString(str.getBytes(charset));
byte[] asBytes3 = Base64.getMimeDecoder().decode(encStr3);
System.out.println("编码【" + encStr3 + "】解码【" + new String(asBytes3, charset) + "】"); //编码【L+eZveS5vua2mw==】解码【/白乾涛】
//MIME编码对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束。
StringBuilder sb = new StringBuilder();
for (int t = 0; t < 5; ++t) {
sb.append(UUID.randomUUID().toString());
}
System.out.println("原始字符【" + sb.toString() + "】");
byte[] toEncode = sb.toString().getBytes(charset);
System.out.println(Base64.getMimeEncoder().encodeToString(toEncode));
}
}一切都很明显了,从上面看出,sun的表现不是很好,IHarder和MigBase64性能可以接受,传说MigBase64性能第一,那也是过去了,在这次测试结果中,新的java8 base64运行速度最好,javaXml表现次之。