JAVA實(shí)現(xiàn)Base64編碼的三種方式
定義: 二進(jìn)制文件可視化
Base64 是一種能將任意二進(jìn)制文件用 64 種字元組合成字串的方法, 彼此之間是可以互相轉(zhuǎn)換的. 也常用來(lái)表示字串加密后的內(nèi)容, 例如電子郵件 (很多文本混雜大量 加號(hào)、/、大小寫字母、數(shù)字和等號(hào),一看就知道是 Base64)
Base64 編碼步驟:
- 第一步,將每三個(gè)字節(jié)作為一組,一共是24個(gè)二進(jìn)制位
- 第二步,將這24個(gè)二進(jìn)制位分為四組,每個(gè)組有6個(gè)二進(jìn)制位 (因?yàn)?6 位 2 進(jìn)制最大數(shù)為 63)
- 第三步,在每組前面加兩個(gè)00,擴(kuò)展成32個(gè)二進(jìn)制位,即四個(gè)字節(jié)
- 第四步,根據(jù)序號(hào)表(0-63),得到擴(kuò)展后的每個(gè)字節(jié)的對(duì)應(yīng)符號(hào)就是Base64的編碼值
sun 包下的 BASE64Encoder
早期在 Java 上做 Base64 的編碼與解碼, 會(huì)使用到 JDK 里的 sun.misc 套件下的 BASE64Encoder 和 BASE64Decoder 這兩個(gè)類, 缺點(diǎn)是編碼和解碼的效率不高
final BASE64Encoder encoder = new BASE64Encoder(); final BASE64Decoder decoder = new BASE64Decoder(); final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); //編碼 final String encodedText = encoder.encode(textByte); System.out.println(encodedText); //解碼 System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));
apache 包下的 Base64
比 sun 包更精簡(jiǎn),實(shí)際執(zhí)行效率高不少, 缺點(diǎn)是需要引用 Apache Commons Codec, 但 tomcat 容器下開(kāi)發(fā), 一般都自動(dòng)引入可直接使用.
final Base64 base64 = new Base64(); final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); //編碼 final String encodedText = base64.encodeToString(textByte); System.out.println(encodedText); //解碼 System.out.println(new String(base64.decode(encodedText), "UTF-8"));
util 包下的 Base64 (jdk8)
java 8 的 java.util 包下 Base64 類, 可用來(lái)處理 Base64 的編碼與解碼
final Base64.Decoder decoder = Base64.getDecoder(); final Base64.Encoder encoder = Base64.getEncoder(); final String text = "字串文字"; final byte[] textByte = text.getBytes("UTF-8"); //編碼 final String encodedText = encoder.encodeToString(textByte); System.out.println(encodedText); //解碼 System.out.println(new String(decoder.decode(encodedText), "UTF-8"));
Java 8 提供的 Base64 效率最高. 實(shí)際測(cè)試編碼與解碼速度, Java 8 的 Base64 要比 sun包下的要快大約 11 倍,比 Apache 的快大約 3 倍.
到此這篇關(guān)于JAVA實(shí)現(xiàn)Base64編碼的三種方式的文章就介紹到這了,更多相關(guān)JAVA Base64編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中的base64編碼器
- java中Base64編碼原理實(shí)例講解
- java base64編碼、解碼的三種方式總結(jié)
- Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換
- java使用Base64編碼實(shí)例
- Java JDK1.7對(duì)字符串的BASE64編碼解碼方法
- java自定義實(shí)現(xiàn)base64編碼轉(zhuǎn)換
- Java實(shí)現(xiàn)BASE64編碼和解碼的方法
- JS實(shí)現(xiàn)對(duì)中文字符串進(jìn)行utf-8的Base64編碼的方法(使其與Java編碼相同)
- Java實(shí)現(xiàn)圖片與Base64編碼互轉(zhuǎn)
- 簡(jiǎn)潔實(shí)用的Java Base64編碼加密異常處理類代碼
相關(guān)文章
MyBatis解決Update動(dòng)態(tài)SQL逗號(hào)的問(wèn)題
這篇文章主要介紹了MyBatis解決Update動(dòng)態(tài)SQL逗號(hào)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot http請(qǐng)求注解@RestController原理解析
這篇文章主要介紹了SpringBoot http請(qǐng)求注解@RestController原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01數(shù)組實(shí)現(xiàn)Java 自定義Queue隊(duì)列及應(yīng)用操作
這篇文章主要介紹了數(shù)組實(shí)現(xiàn)Java 自定義Queue隊(duì)列及應(yīng)用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實(shí)例
這篇文章主要介紹了Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07