最近因為工作需要對一些檔案上傳需要進行base64編碼操作,於是就自己溫習了一下base64編碼集的原理,感覺收穫良多,在這裡和大家分享一下!
因為我們都是在網際網路上資料的傳輸最終都會以二進位制的方式傳輸,檔案上傳的i/o流也不例外,最終都是二進位制陣列的方式傳輸,但是二進位制儲存到資料庫中卻是不太現實的,因為它是在太長了。
例子:我們將乙個本地檔案同i/o讀取出來,並且轉換成byte組,在裝換成base64編碼集的結果。
**如下:
public static void main(string args) throws ioexception
byte baostype = baos.tobytearray();
baos.close();
fis.close();
//byte陣列的值[70, 65, 84, 65]
//轉換成二進位制是:01000110010000010101010001000001
//我們將這個二進位制斷開一下 01000110 01000001 01010100 01000001
system.out.println(arrays.tostring(baostype));
byte base64 = base64.getencoder().encode(baostype);
//轉成成base64的結果:wyagrkfuquxdw1c=
system.out.println(base64.getencoder().encodetostring(baostype));
}
我們可以看到本地檔案的二進位制陣列是如下:
[70, 65, 84, 65]
如果們給他轉成二進位制格式是如下:
01000110 01000001 01010100 01000001
因為數字的長度4位,所有它是有4位位元組組成,1個位元組由8位二進位制組成,我們可以通過得到如上的二進位制。
下面我們詳細講述一下base64如何把這個二進位制轉成base64的編碼集。
base64編碼集的底層是把原有的3個二進位制位元組的24位二進位制分成4份,變成4個6位的二進位制,在對著4個6位二進位制的前面加上2個0進行補位,這樣就變成4個位元組32個二進位制。而生成的新的乙個位元組的前面兩位為0,所有這樣的位元組換算成十進位制的大小範圍只能在0到63之間。如果位元組數不是3的整數倍的時候,我們就需要在原來的位元組後面新增乙個或者兩個零指的位元組,使其位元組長度是3的整數倍,同樣需要在base64編碼集編碼後的字串的後面新增乙個或者兩個「=」,表示新增的零值位元組數。
這裡簡單科普一下:乙個位元組又被稱作乙個ascii碼,也就是有8位二進位制組成,換算成十進位制的取值範圍就是-128到127之間。
而我們採用的byte位元組型別,byte位元組型別的取值型別是0到255,所以當前兩位都為0的時候,取值範圍就是0到63之間。
那麼我們按照上面的規則對如下的乙個4位位元組的二進位制進行轉成:01
0001
1001
0000
0101
0101
0001
0000
01
第一件事我們要在原來的4個位元組的後面新增兩個零值位元組變成如下結果:01
0001
1001
0000
0101
0101
0001
0000
0100
0000
0000
0000
00
第二件事我們給這個6個位元組的進行6位一組重新劃分,劃分結果如下:01
0001
1001
0000
0101
0101
0001
0000
0100
0000
0000
0000
0001
0001
1001
0000
0101
0101
0001
0000
0100
0000
0000
0000
00
第三件事對重新劃分的6位在前面進行補位操作補上0得到的格式如下:00
0100
0100
1001
0000
0001
0100
0101
0000
0100
0000
0100
0000
0000
0000
0000
00這樣我們就得到乙個8個位元組的8位二進位制,左邊是8位二進位制,而右邊是十進位制的值。
第四件事我們就是需要對照base64的碼表:0a
8i16q
24y32g
40o48w
5641b
9j17r
25z33h
41p49x
5752c
10k18s
26a34i
42q50y
5863d
11l19t
27b35j
43r51z
5974e
12m20u
28c36k
44s520
6085f
13n21v
29d37l
45t531
6196g
14o22w
30e38m
46u542
62+7h
15p23x
31f39n
47v553
63/
對照上面的base64碼表我們很重找到結果是如下的:
rkfuqq==
綜上所述我們可以很清晰了解到base64的編碼格式。
base64編碼 動畫演示 Base 64 編碼
base64 是一種十分流行的編碼方式,僅僅使用 64 個字元加等號 就可以以文字的形式表示所有的二進位制資料了,因為它能夠把二進位制格式通過編碼轉換成可見字元,所有我們就可以通過的把二進位制格式比如,檔案等通過 base64 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...
Base64編碼演算法
base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然 後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理 論上將要比原來的長1 3。轉換後,我們用乙個碼表來得到我們想要的字串 也就是最終的base64編碼 這個表是這樣的 0 a 1...
Base64編碼演算法
base64 construe aaaaaaaa bbbbbbbb cccccccc dddddddd ffffffff 3byte to 4byte is encode 00aaaaaa 00aabbbb 00bbbbcc 00cccccc 3byte newlen 4 00aaaaaa 00aa...