Java8的Base64编码和解码工具包

1 篇文章 0 订阅
1 篇文章 0 订阅

在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开头引入的类。

声明的链接:http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html

 

有人对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解码成文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值