Java8————Base64
Base64?
Base64是一種用64個字符來表示任意二進制數據的方式。
對于二進制文件如圖片、exe、音頻、視頻等,包含很多無法顯示和打印的字符,如果希望能夠通過記事本這樣的文本處理軟件處理二進制數據,就需要一個二進制轉字符串的轉換方法。
Base64是一種非常常用的二進制編解碼方案。編解碼方法簡單且公開,并不具有加密解密的效用。只作為一種二進制數據的文本存儲格式。
Base64的64個字符
64個字符,每個字符代表一種編碼,共64種編碼。
A-Z , a-z , 0-9 , + , /
Base64的編碼原理
對于長短不一的二進制數據,Base64將其從頭部開始以三個字節為一組(24 bit),一組劃分成4等塊(每塊6 bit),根據乘法原理,這6bit的二進制共有2^6 = 64種編碼方式,正好對應64個字符。
換句話說,Base64將二進制數據從頭開始,每6 bit 用一個字符(64個基本字符中的一個)代替表示,一直到二進制數據末尾。
不論是Unicode字符集(Java默認,一個英文字符2個字節),還是UTF-8(一個英文字符1個字節),亦或是ASCII(一個英文字符一個字節),二進制數據通過Base64進一步轉化后長度一定是增加的。雖然增加了網絡傳輸量,但是好處是不會存在因為無法顯示或打印的字符而造成數據的丟失,保證了數據在傳輸中的完整性。
Base64的補位
Base64要求轉化后的結果必須能被 4 整除,也就是說二進制數據字節數必須是3的倍數,如果末尾多出一個或兩個字節,Base64會額外補充一個“=” 或兩個“=”,表示補了多少個字節,在解碼的時候會自動去掉。
Java8的Base64
在Java8之前一直是缺少Base64編碼解碼的API,我們通常會使用第三方工具。
Java8 為開發者提供了 java.util.Base64 的工具類,并提供一套靜態方法獲取三種Base64編解碼器:
1)Basic編碼
2)URL編碼
3)MIME編碼
Basic編碼
Basic編碼是標準的Base64編碼,用于處理常規的需求:輸出的內容不添加換行符,而且輸出的內容由64個基本字符組成。
try {String encoded = Base64.getEncoder().encodeToString("Will Smith = 威爾·史密斯".getBytes("UTF-8"));System.out.println(encoded);String decoded = new String(Base64.getDecoder().decode(encoded));System.out.println(decoded); } catch (UnsupportedEncodingException e) {e.printStackTrace(); }?輸出:
URL編碼
由于標準的Basic編碼可能會出現+ 和 / ,在URL中就不能直接作為參數,所以又有一種“url safe” 的Base64編碼,其實就是吧字符 + 和 / 分別變成 - 和_
?MIME編碼
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用對應的應用程序來打開的方式類型。
它是一種互聯網標準,擴展了電子郵件標準,使其可以支持:非ASCII字符文本;非文本格式附件(二進制、聲音、圖像等);由多部分組成的消息體;包含非ASCII字符的頭信息等。
舉個栗子:右鍵中有一個Word附件(二進制文件),點擊預覽,瀏覽器會直接打開Office。可以理解為MIME設定了這種對應關系。
MIME編碼器會使用基本的字母數字產生BASE64輸出,而且對MIME格式友好:每一行輸出不超過76個字符,而且每行以“\r\n”符結束。
?
總結
以上是生活随笔為你收集整理的Java8————Base64的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用springboot来实现WebLo
- 下一篇: Java并发编程实战————Semaph