Java Base64 编码解码方案总结

转载自  Java Base64 编码解码方案总结

Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。如果要使用Java 程式语言来实作Base64的编码与解码功能,可以参考本篇文章的作法。

早期作法

早期在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,用法如下:

  1. final BASE64Encoder encoder = new BASE64Encoder();

  2. final BASE64Decoder decoder = new BASE64Decoder();

  3. final String text = "Java技术栈";

  4. final byte[] textByte = text.getBytes("UTF-8");

  5.  

  6. //编码

  7. final String encodedText = encoder.encode(textByte);

  8. System.out.println(encodedText);

  9.  

  10. //解码

  11. System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));

  12.  

  13. final BASE64Encoder encoder = new BASE64Encoder();

  14. final BASE64Decoder decoder = new BASE64Decoder();

  15. final String text = "Java技术栈";

  16. final byte[] textByte = text.getBytes("UTF-8");

  17.  

  18. //编码

  19. final String encodedText = encoder.encode(textByte);

  20. System.out.println(encodedText);

  21.  

  22. //解码

  23. 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类别,用法如下:

  1. final Base64 base64 = new Base64();

  2. final String text = "Java技术栈";

  3. final byte[] textByte = text.getBytes("UTF-8");

  4.  

  5. //编码

  6. final String encodedText = base64.encodeToString(textByte);

  7. System.out.println(encodedText);

  8.  

  9. //解码

  10. System.out.println(new String(base64.decode(encodedText), "UTF-8"));

  11.  

  12. final Base64 base64 = new Base64();

  13. final String text = "Java技术栈";

  14. final byte[] textByte = text.getBytes("UTF-8");

  15.  

  16. //编码

  17. final String encodedText = base64.encodeToString(textByte);

  18. System.out.println(encodedText);

  19.  

  20. //解码

  21. System.out.println(new String(base64.decode(encodedText), "UTF-8"));

以上的程式码看起来又比早期用sun.mis c套件还要更精简,效能实际执行起来也快了不少。缺点是需要引用Apache Commons Codec,很麻烦。

Java 8之后的作法

Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码,用法如下:

  1. final Base64.Decoder decoder = Base64.getDecoder();

  2. final Base64.Encoder encoder = Base64.getEncoder();

  3. final String text = "Java技术栈";

  4. final byte[] textByte = text.getBytes("UTF-8");

  5.  

  6. //编码

  7. final String encodedText = encoder.encodeToString(textByte);

  8. System.out.println(encodedText);

  9.  

  10. //解码

  11. System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

  12.  

  13. final Base64.Decoder decoder = Base64.getDecoder();

  14. final Base64.Encoder encoder = Base64.getEncoder();

  15. final String text = "Java技术栈";

  16. final byte[] textByte = text.getBytes("UTF-8");

  17.  

  18. //编码

  19. final String encodedText = encoder.encodeToString(textByte);

  20. System.out.println(encodedText);

  21.  

  22. //解码

  23. 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倍。因此在Java上若要使用Base64,这个Java 8底下的java .util套件所提供的Base64类别绝对是首选!

参考:https://magiclen.org/java-base64/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

babel基本使用

babel 转码器es6->es5 第一步 安装babel工具,使用命令,查看版本号 npm install --global babel-clibabel --version第二步 配置文件 .babelrc(后缀名固定) {"presets": ["es2015"],"plugins": [] }第…

tar (child): .tgz\r:无法 open: 没有那个文件或目录

Linux下运行bash脚本显示“: /usr/bin/env: "bash\r": 没有那个文件或目录 程序员小熊 2017-12-18 14:45:45 18395 收藏 7 分类专栏: Linux 版权 用 ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原…

Entity Framework Core 1.1 升级通告

Entity Framework Core(EF Core)是一个轻量级的,可扩展和实体框架的跨平台版本。今天,我们宣布 Entity Framewor Core 1.1 正式可用了。 EF Core 和 .NET Core 遵循相同的发行周期。每2个月不断的改进和每6个月的新功能发布。这是…

聊聊微服务架构及分布式事务解决方案

转载自 聊聊微服务架构及分布式事务解决方案 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务小事务(原子事务)异步(消息通知)&am…

2014年JAVA省赛B组---第四题---大衍数列

【答案】&#xff1a; i % 2 0 public class TEST { // 奇偶数判断&#xff1a;x % 2 0public static void main(String[] args) {for (int i 1; i < 100; i) {if (i % 2 0) // 填空System.out.println(i * i / 2);elseSystem.out.println((i * i - 1) / 2);}}}

使用熔断器设计模式保护软件

作为软件开发人员&#xff0c;我们的生活是快节奏的&#xff0c;我们采用的是敏捷软件开发方法&#xff0c;迭代式的开发我们软件功能&#xff0c;开发完成提交测试&#xff0c;通过了QA的测试后被部署到生产环境&#xff0c;然后可怕的事情在生产环境里发生了&#xff0c;生产…

好的句子

"大概每个人都会遇到一个不能在一起的人&#xff0c;放手舍不得&#xff0c;坚持又太累&#xff0c;这样的爱而不得最是煎熬。" 你要去做一个懂事的大人&#xff0c;不要回头&#xff0c;不要难过。

hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice

最近在做项目中遇到一个简单的问题&#xff0c;但是解决了好久&#xff0c;问题就是投影查询。 先来看看出现的异常&#xff1a; java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice at cn.bdqn.guanMingSys.dao.i…

架构师之路:从码农到架构师你差了哪些

转载自 架构师之路&#xff1a;从码农到架构师你差了哪些 Web应用&#xff0c;最常见的研发语言是Java和PHP。 后端服务&#xff0c;最常见的研发语言是Java和C/C。 大数据&#xff0c;最常见的研发语言是Java和Python。 可以说&#xff0c;Java是现阶段中国互联网公司中&…

2014蓝桥杯-B-省赛-五-圆周率

【答案】&#xff1a;4 / (x - 1)) public class TEST {public static void main(String[] args) {double x 111;for (int n 10000; n > 0; n--) {int i 2 * n 1; //把i变为奇数x 2 (i * i / x);}// x21/xSystem.out.println(String.format("%.4f", 4 /…

Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题&#xff0c;就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现。SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字&#xff0c;它表明数据库中数…

mvc.net分页查询案例——PagedList

在.net中&#xff0c;除了人手动写分页类之外&#xff0c;微软还提供了官方的分页&#xff0c;分页工具类包括PagedList和PagerExtension&#xff0c;先来看看PagedList类里面是怎么写的&#xff1a; PagedList using System; using System.Collections.Generic; using Syste…

干货 | Tomcat 连接数与线程池详解

转载自 干货 | Tomcat 连接数与线程池详解 前言 在使用tomcat时&#xff0c;经常会遇到连接数、线程数之类的配置问题&#xff0c;要真正理解这些概念&#xff0c;必须先了解Tomcat的连接器&#xff08;Connector&#xff09;。 在前面的文章 详解Tomcat配置文件server.xml…

cnpm install无反应

cnpm install无反应 推荐使用国内镜像来安装&#xff0c;所以我们先设置 cnpm&#xff1a; npm install -g cnpm --registryhttps://registry.npm.taobao.org 如果安装失败&#xff0c;可以使用npm cache clean清理缓存&#xff0c;然后再重新安装。

120项优化: 超级爬虫Hawk 2.0重磅发布!

沙漠君在历时半年&#xff0c;修改无数bug&#xff0c;更新一票新功能后&#xff0c;在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥&#xff1f;你不知道Hawk干吗用的&#xff1f; 这是采集数据的挖掘机&#xff0c;网络猎杀的重狙&#xff01;半年多以前&#xff0c;沙漠君写…

github创建一个新的tag

https://git-scm.com/book/en/v2/Git-Basics-Tagging

Java 编程中关于异常处理的 10 个最佳实践

转载自 Java 编程中关于异常处理的 10 个最佳实践 异常处理是Java 开发中的一个重要部分。它是关乎每个应用的一个非功能性需求&#xff0c;是为了处理任何错误状况&#xff0c;比如资源不可访问&#xff0c;非法输入&#xff0c;空输入等等。Java提供了几个异常处理特性&…

phone6s home键按不动了怎么办 苹果6s home键按不动解决方法

iphone6s home键按不动了怎么办 苹果6s home键按不动解决方法 作者&#xff1a;佚名 来源&#xff1a;绿茶软件园 2016-02-15 15:53:35 iphone6s home键按不动了怎么办&#xff1f;有iphone用户遇到home键按不动了的问题&#xff0c;下文小乐哥带来苹果6s home键按不动解决方法…

开源库Magicodes.ECharts使用教程

概要 Magicodes.ECharts是心莱团队基于百度EChart封装的开源的.NET类库&#xff0c;以便让用户更快更便捷的上手开发EChart图表。本篇主要讲解Magicodes.ECharts的相关使用。 注意&#xff1a;EChart图表插件是由百度提供的一套前端图表库&#xff0c;可以流畅运行在PC端和移动…

Spring Boot 配置随机数那些小技巧

转载自 Spring Boot 配置随机数那些小技巧 Spring Boot支持在系统加载的时候配置随机数。 添加config/random.properties文件&#xff0c;添加以下内容&#xff1a; #随机32位MD5字符串 user.random.secret${random.value} #随机int数字 user.random.intNumber${rando…