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); |
---|