简单介绍了base64编码,给出三种实现方式性能比较,可直接使用最后提供的工具类,性能比较不必细看,没营养。

1 base64编码

将字符串编码成[0-9a-zA-Z+/=]的格式,通过解码又可以换成成原有的样子,就是这么简单。

我爱编码!--> 5oiR54ix57yW56CB77yB---我爱编码

2 三种实现方式性能比较

package util.base64;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import org.apache.commons.codec.binary.Base64;/**** base64编码实现的三种实现方式性能测试,推荐使用Java8提供的方法**/
public class BASE64EncoderTest {/*** 实际测试编码与解码速度的话,Java 8提供的Base64比Apache Commons Codec提供的还要快* ,Apache Commons Codec提供的比sun.misc提供的还要快。* 因此在Java上若要使用Base64,这个Java 8的java.util提供的Base64类是首选!**** @param args*/public static void main(String[] args){sunMiscDemo();apacheCommonsCodecDemo();java8UtilDemo();}/*** 早期在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和* BASE64Decoder这两个类别,用法如下:*Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.* BASE64Encoder/BASE64Decoder类。* 这个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。* 但是在Eclipse和MyEclipse中直接使用,却找不到该类。解决方法如下:*/public static void sunMiscDemo() {BASE64Encoder encoder = new BASE64Encoder();BASE64Decoder decoder = new BASE64Decoder();String str = "字串文字";String strEncoder = null;String strDecoder = null;Long startDate = new Date().getTime();for(int i = 0; i < 1000000; i++){//编码try {strEncoder = encoder.encode(str.getBytes("UTF-8"));//System.out.println("strEncoder=" + strEncoder);} catch (UnsupportedEncodingException e) {e.printStackTrace();}//解码try {strDecoder = new String(decoder.decodeBuffer(strEncoder), "UTF-8");//System.out.println("strDecoder=" + strDecoder);} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}Long endDate = new Date().getTime();System.out.println("SunMis test 100w次 加密解密耗时:" + (endDate - startDate));}/*** Apache Commons Codec有提供Base64的编码与解码功能,会使用到* org.apache.commons.codec.binary套件下的Base64类别*/public static void apacheCommonsCodecDemo() {Base64 base64 = new Base64();String str = "字串文字";String strEncode = null;String strDecode = null;Long startDate = new Date().getTime();for(int i = 0; i < 1000000; i++){byte[] b = null;//编码try {strEncode = new String(base64.encode(str.getBytes("UTF-8")), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}//解码try {strDecode = new String(base64.decode(strEncode.getBytes("UTF-8")), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}Long endDate = new Date().getTime();System.out.println("ApacheCommons  test 100w次耗时:" + (endDate - startDate));}/*** Java 8之后的作法* Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码,用法如下:**/public static void java8UtilDemo() {java.util.Base64.Encoder encoder = java.util.Base64.getEncoder();java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();String str = "字串文字";String strEncoder = null;String strDecoder = null;Long startDate = new Date().getTime();for(int i = 0; i < 1000000; i++){//编码try {strEncoder = encoder.encodeToString(str.getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}//解码try {strDecoder = new String(decoder.decode(strEncoder), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}Long endDate = new Date().getTime();System.out.println("Java8 test 100w次耗时:" + (endDate - startDate));}}

运行结果:

3 最优方式工具类

package util.base64;
import java.util.Base64;/*** base64 加密解密*/
public class Base64UtilXb {public static void main(String[] args) {System.out.println(encrypt("我爱编码!"));}/*** BASE64加密*/public static String encrypt(String str){if(str==null)return null;byte[] bytes = str.getBytes();//Base64 加密String encoded = Base64.getEncoder().encodeToString(bytes);System.out.println("Base 64 加密后:" + encoded);return encoded;}/*** BASE64解密* @throws Exception*/public static String  decrypt(String key)  {if(key==null)return null;byte[] decoded = Base64.getDecoder().decode(key);String decodeStr = new String(decoded);System.out.println("Base 64 解密后:" + decodeStr);return decodeStr;}}

java 实现base64编码的三种方式、各方式性能比较、最后给出最优工具类 小白实操记录相关推荐

  1. base64编码的三种方式、各方式性能比较

    转载链接:java 实现base64编码的三种方式.各方式性能比较.最后给出最优工具类 小白实操记录 转载内容: 简单介绍了base64编码,给出三种实现方式性能比较,可直接使用最后提供的工具类,性能 ...

  2. java base64编码的三种方式

    Java 中如何使用base64编码呢? 有如下三种方式: 方式一:commons-codec.jar Java代码   String base64String = "whuang123&q ...

  3. 转list_你知道Java数组转List的三种方式及对比吗?

    前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...

  4. Java 数组转 List 的三种方式及对比

    来源 | blog.csdn.net/x541211190/article/details/79597236 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的 ...

  5. Java实现Base64编码和解码的方式

    Base64 编码是什么? Base64 是一种编码的方式, 并不是安全领域的加密解密算法. Base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输. 因为有些系统只能使用ASCII字符 ...

  6. response设置编码的三种方式以及比较

    https://blog.csdn.net/u010653908/article/details/53994021 response设置编码的三种方式以及比较 2017年01月03日 14:12:46 ...

  7. Java数组转List的三种方式及对比

    前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...

  8. Java中List集合的三种遍历方式(全网最详)

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  9. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

  10. java中实现多线程的三种方式

    java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: ​ 继承类T ...

最新文章

  1. 浓缩精华的架构演进过程,我连看了六遍!
  2. Struts2_day02--封装数据到集合里面
  3. ABAP 数字处理相关内容备注
  4. 使用Atom编辑文本文件
  5. mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法
  6. 圈钱跑路 发行自己的ERC20 Token
  7. python 语音识别机器人控制系统_python实现百度语音识别api
  8. 实用MYSQL语句收集
  9. 电脑开机3秒就重启循环_电脑修好后客户不愿支付上门费,行,那电脑开机60秒自动关机吧!...
  10. 无处不在的xss攻击
  11. 128_Power BI父级排名TOPN子级动态展示
  12. SQL Server命令行
  13. func_get_args()获取一个函数的所有参数
  14. 埃森哲:AI成新生产要素,2035年将中国经济增速提高1.6% | 附下载
  15. 「需求广场」需求词更新明细(三)
  16. activiti7基础入门、activiti7实战、activiti7运用
  17. 西安交大2021考研计算机专业复试分数线,西安交通大学2021年研究生复试分数线是多少...
  18. Android开发:基站定位
  19. 微软bi报表服务器,升级 Power BI 报表服务器
  20. 粉色的html 标签,22个粉色主调的网页设计欣赏

热门文章

  1. back函数php,PHP callback函数使用方法和注意事项
  2. echarts无数据时显示无数据_无服务器数据库竞技,哪家云服务落伍了?
  3. 什么情况下使用weak关键字,相比assign有什么不同
  4. hdu 1540 Tunnel Warfare (线段树维护左右最长连续区间)
  5. Codeforces Round #187 (Div. 2) D
  6. 什么是南向接口和北向接口?
  7. linux下卸载之前安装的qt4和qt5
  8. 有意思的堪称世界级的电视广告!!:)
  9. python case when用法_oracle菜鸟学习之 select case when的使用
  10. qt传递数组给js(支持多组)