JAVA實(shí)現(xiàn)Base64編碼的三種方式
定義: 二進(jìn)制文件可視化
Base64 是一種能將任意二進(jìn)制文件用 64 種字元組合成字串的方法, 彼此之間是可以互相轉(zhuǎn)換的. 也常用來表示字串加密后的內(nèi)容, 例如電子郵件 (很多文本混雜大量 加號、/、大小寫字母、數(shù)字和等號,一看就知道是 Base64)
Base64 編碼步驟:
- 第一步,將每三個字節(jié)作為一組,一共是24個二進(jìn)制位
- 第二步,將這24個二進(jìn)制位分為四組,每個組有6個二進(jìn)制位 (因?yàn)?6 位 2 進(jìn)制最大數(shù)為 63)
- 第三步,在每組前面加兩個00,擴(kuò)展成32個二進(jìn)制位,即四個字節(jié)
- 第四步,根據(jù)序號表(0-63),得到擴(kuò)展后的每個字節(jié)的對應(yīng)符號就是Base64的編碼值
sun 包下的 BASE64Encoder
早期在 Java 上做 Base64 的編碼與解碼, 會使用到 JDK 里的 sun.misc 套件下的 BASE64Encoder 和 BASE64Decoder 這兩個類, 缺點(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 包更精簡,實(shí)際執(zhí)行效率高不少, 缺點(diǎn)是需要引用 Apache Commons Codec, 但 tomcat 容器下開發(fā), 一般都自動引入可直接使用.
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 類, 可用來處理 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í)際測試編碼與解碼速度, Java 8 的 Base64 要比 sun包下的要快大約 11 倍,比 Apache 的快大約 3 倍.
到此這篇關(guān)于JAVA實(shí)現(xiàn)Base64編碼的三種方式的文章就介紹到這了,更多相關(guān)JAVA Base64編碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
maven-surefire-plugin總結(jié)示例詳解
這篇文章主要介紹了maven-surefire-plugin總結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
Java中的線程池ThreadPoolExecutor深入解析
這篇文章主要介紹了Java中的線程池ThreadPoolExecutor深入解析,線程池,thread pool,是一種線程使用模式,線程池維護(hù)著多個線程,等待著監(jiān)督管理者分配可并發(fā)執(zhí)行的任務(wù),需要的朋友可以參考下2023-11-11
SpringBoot2.0集成WebSocket實(shí)現(xiàn)后臺向前端推送信息
這篇文章主要介紹了SpringBoot2.0集成WebSocket實(shí)現(xiàn)后臺向前端推送信息,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Java 實(shí)現(xiàn)LZ78壓縮算法的示例代碼
這篇文章主要介紹了Java 實(shí)現(xiàn)LZ78壓縮算法的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
Springboot詳解整合SpringSecurity實(shí)現(xiàn)全過程
Spring Security基于Spring開發(fā),項(xiàng)目中如果使用Springboot作為基礎(chǔ),配合Spring Security做權(quán)限更加方便,而Shiro需要和Spring進(jìn)行整合開發(fā)。因此作為spring全家桶中的Spring Security在java領(lǐng)域很常用2022-07-07

