1. 程式人生 > >Java8的Base64編碼和解碼工具包

Java8的Base64編碼和解碼工具包

在Java7及7之前,要實代Base64編碼,要麼藉助sun.misc.BASE64Encoder,或者apache commons-codec,再或者Guava、JAXB的DatatypeConverter,到了Java8,官方已經把Base64進行了重新優化,並直接放到了java.util包裡了。

實現起來,比之前的都要簡單優雅,效能卓越,無需引用第三方包。

sun的Base64被廣泛使用,但sun、com.sun開頭的包並非是公開的,sun沒有提供API文件,引用時也會被提醒warning,不包含在Java平臺的標準中,實現還與作業系統或jdk的供應商有關,比如openJDK就沒有自帶com.sun或sun開頭的包。

Oracle也發表了宣告,從JDK 1.7開始,java程式設計師不能呼叫JDK系統包中以sun開頭引入的類。

有人對sun、apache-codec、guava等多個Base64庫進行了效能測試:sun的效能最差,java.util自帶的Base64效能最好,java.util.Base64比sun有著近3倍效能的提升。功能方面,java.util.Base64還提供了對URL、MIME友好的編碼器與解碼器。

以下是Base64對字串和檔案流的編碼和解碼:

1.字串的編碼

String base64 = Base64.getEncoder().encodeToString("在Java 8中,Base64編碼已經成為Java類庫的標準。".getBytes("utf-8"));

//以上可以將字串轉成Base64格式的串

2.字串解碼

String str = new String(Base64.getDecoder().decode("SmF2YTggQmFzZTY0IEphdmEgOCDmlrDnibnmgKcg5ZyoSmF2YSA45LitLEJhc2U2NOe8lueggeW3sue7j+aIkOS4ukphdmHnsbvlupPnmoTmoIflh4bjgIIgSmF2YSA4IOWGhee9ruS6hiBCYXNlNjQg57yW56CB55qE57yW56CB5Zmo5ZKM6Kej56CB5Zmo44CCIEJhc2U2NOW3peWFt+exu+aPkOS+m+S6huS4gOWll+mdmeaAgS4uLg=="), "UTF-8");

//以上對Base64的串實現解碼

3. 檔案實現Base64編碼

File file = new File("C:\\Users\\Loufree\\Desktop\\1.png");

byte[] b = Files.readAllBytes(Paths.get(file.getAbsolutePath()));

String base64Str = Base64.getEncoder().encodeToString(b);

//使用了非阻塞的java.nio工具包,以上是將1.png圖片轉成base64編碼

4. Base64解碼成檔案

String str = "ZG9ja2VyIGVjbGlwc2Xmj5Lku7YNCuWQjeensO+8mmRvY2tlci1uaWdodGx5DQrlnLDlnYDvvJpodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbGludXh0b29scy91cGRhdGVzLWRvY2tlci1uaWdodGx5Lw==";

Files.write(Paths.get("D:/create.txt"), Base64.getDecoder().decode(str), StandardOpenOption.CREATE);
//使用了非阻塞的java.nio工具包,Base64解碼成檔案。