摘要:是一种能将任意资料用种字元组合成字串的方法,而这个资料和字串资料彼此之间是可以互相转换的,十分方便。实际测试编码与解码速度的话,提供的,要比套件提供的还要快至少倍,比提供的还要快至少倍。
Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。
早期作法
早期在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,用法如下:
final BASE64Encoder encoder = new BASE64Encoder(); final BASE64Decoder decoder = newBASE64Decoder(); final String text ="Java深入"; 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")); final BASE64Encoder encoder = new BASE64Encoder(); final BASE64Decoder decoder = new BASE64Decoder(); final String text ="Java深入"; 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"));
从以上程式可以发现,在Java用Base64一点都不难,不用几行程式码就解决了!只是这个sun.mis c套件所提供的Base64功能,编码和解码的效率并不太好,而且在以后的Java版本可能就不被支援了,完全不建议使用。
Apache Commons Codec作法
Apache Commons Codec有提供Base64的编码与解码功能,会使用到org.apache.commons.codec.binary套件下的Base64类别,用法如下:
final Base64 base64 = new Base64(); final String text = "Java深入"; 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")); final Base64 base64 = new Base64(); final String text = "Java深入"; 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"));
以上的程式码看起来又比早期用sun.mis c套件还要更精简,效能实际执行起来也快了不少。缺点是需要引用Apache Commons Codec,很麻烦。
Java 8之后的作法
Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码,用法如下:
final Base64.Decoder decoder = Base64.getDecoder(); final Base64.Encoder encoder = Base64.getEncoder(); final String text = "Java深入"; 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")); finalBase64.Decoder decoder = Base64.getDecoder(); final Base64.Encoder encoder = Base64.getEncoder(); final String text = "Java深入"; 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"));
与sun.mis c套件和Apache Commons Codec所提供的Base64编解码器来比较的话,Java 8提供的Base64拥有更好的效能。实际测试编码与解码速度的话,Java 8提供的Base64,要比sun.mis c套件提供的还要快至少11倍,比Apache Commons Codec提供的还要快至少3倍。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76807.html
摘要:用于统一编码格式。由于和内置的遵守的协议不一致,按照照实现的,是按照和两个协议来实现的。由于协议的不同可能导致的解码编码的数据时抛出异常因此需要特别注意保持解码编码的一致性。 jdk1.8 base64的编码转码 实用场景 最近工作上有个需求,需要根据图片的url下载到本地,并且客户端无法访问到url只能接收base64图片码。因此决定采用jdk自带的Base64进行编码转码存储。 ...
摘要:时间年月日星期一说明本文部分内容均来自慕课网。多用于网络加密。散列函数函数或消息摘要函数主要作用散列函数用来验证数据的完整性。 时间:2017年4月10日星期一说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:https://github.com/zccodere...
摘要:上一篇小乐给大家说了乐字节新特性之,接下来小乐继续给大家说一说新特性之和重复注解与类型注解。内部类与方法相关的内部类这是一个静态类。也是一个静态类。 上一篇小乐给大家说了《乐字节-Java8新特性之Date API》,接下来小乐继续给大家说一说Java8新特性之Base64和重复注解与类型注解。 一、Base64 在Java 8中,内置了Base64编解码相关的特性。Java 8中使用...
摘要:字符集编码就是对字符根据不同字符集中对应的格式进行编码解码,这个大家都好理解。下面详细说说,以编码解码和编码解码为例。 《来自罗志晓的笔记:http://note.youdao.com/notesh...》我们平时老说的编码解码,很多人都只知道 字符集编码解码。其实除了字符集编码解码,常见的还有另一类,如 Url编码解码、Base64编码解码。这两类编码的原理是完全不一样的,如果没有了...
摘要:于是有趣的事发生了,同学们纷纷用自己最擅长的语言,把字符串编解码实现了一遍我把小伙伴们用各种方式实现的方法整理下,有,,,,,,。解码编码编码解码编码邮箱编码解码邮箱解码编码解码输入加密加密结果解密解密结果哈哈哈我的小伙伴们都太可爱了 故事起源于逛v站的求职和招人贴,每次都是一长串字符,很迷惑,不知道是邮箱,还是微信号,还是钉钉,还是QQ。showImg(https://segment...
阅读 957·2022-06-21 15:13
阅读 1847·2021-10-20 13:48
阅读 1027·2021-09-22 15:47
阅读 1364·2019-08-30 15:55
阅读 3112·2019-08-30 15:53
阅读 519·2019-08-29 12:33
阅读 711·2019-08-28 18:15
阅读 3458·2019-08-26 13:58