1.首先线上码表:
===============================================================
用例子来说明 Base64
public class TestMain { public static void main(String[] args) throws UnsupportedEncodingException { String a = Base64.getEncoder().encodeToString("a".getBytes("UTF-8")); String ab = Base64.getEncoder().encodeToString("ab".getBytes("UTF-8")); String abc = Base64.getEncoder().encodeToString("abc".getBytes("UTF-8")); System.out.println(a); System.out.println(ab); System.out.println(abc); } }
我们来分析 以上 这个例子:
首先看下ascii表,字母 --- 二进制(4位排列)---- 二进制(6位一组排列):
a ---> 0100 0001 ---> 010000 01(按6位一组排列,缺少4位)
ab ---> 0100 0001 0100 0010 ---> 010000 010100 0010(按6位一组排列,缺少2位)
abc ---> 0100 0001 0100 0010 0100 0011 ---> 010000 010100 001001 000011(按6位一组排列,正好,因为 4*6 = 3* 8 = 24)
有了以上二进制,下面再继续说,说明一点 a 若按6位一组排列是不够的,缺少低4位,严重注意一点 a 的 010000 01(这个01是要看成高位),这个时候 他们规定了一个规则,就是你需要把最后的二进制01看成6位一组的高位,
后面缺少的4位,根据规定,你需要当成全部是0,注意点是设定为0,可不是网上说的什么填充为0,这个和填充没有任何关系,和传输也没有任何关系,一切都是规定 ,只是一种规定的算法,然后可以根据规则再逆转回来
与传输数据没有任何关系,哎呀 这里说不清了,算了,只需要知道 规则算法就行了。
然后就可以计算出对应的值:
a ---- 010000 01 --- 2的4次方 + 2的4次方(01是高位切记) ---