java 实现base64编码的三种方式、各方式性能比较、最后给出最优工具类 小白实操记录
简单介绍了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编码的三种方式、各方式性能比较、最后给出最优工具类 小白实操记录相关推荐
- base64编码的三种方式、各方式性能比较
转载链接:java 实现base64编码的三种方式.各方式性能比较.最后给出最优工具类 小白实操记录 转载内容: 简单介绍了base64编码,给出三种实现方式性能比较,可直接使用最后提供的工具类,性能 ...
- java base64编码的三种方式
Java 中如何使用base64编码呢? 有如下三种方式: 方式一:commons-codec.jar Java代码 String base64String = "whuang123&q ...
- 转list_你知道Java数组转List的三种方式及对比吗?
前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...
- Java 数组转 List 的三种方式及对比
来源 | blog.csdn.net/x541211190/article/details/79597236 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的 ...
- Java实现Base64编码和解码的方式
Base64 编码是什么? Base64 是一种编码的方式, 并不是安全领域的加密解密算法. Base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输. 因为有些系统只能使用ASCII字符 ...
- response设置编码的三种方式以及比较
https://blog.csdn.net/u010653908/article/details/53994021 response设置编码的三种方式以及比较 2017年01月03日 14:12:46 ...
- Java数组转List的三种方式及对比
前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...
- Java中List集合的三种遍历方式(全网最详)
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- Java中实现接口的三种方式您造吗?
本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...
- java中实现多线程的三种方式
java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: 继承类T ...
最新文章
- 浓缩精华的架构演进过程,我连看了六遍!
- Struts2_day02--封装数据到集合里面
- ABAP 数字处理相关内容备注
- 使用Atom编辑文本文件
- mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法
- 圈钱跑路 发行自己的ERC20 Token
- python 语音识别机器人控制系统_python实现百度语音识别api
- 实用MYSQL语句收集
- 电脑开机3秒就重启循环_电脑修好后客户不愿支付上门费,行,那电脑开机60秒自动关机吧!...
- 无处不在的xss攻击
- 128_Power BI父级排名TOPN子级动态展示
- SQL Server命令行
- func_get_args()获取一个函数的所有参数
- 埃森哲:AI成新生产要素,2035年将中国经济增速提高1.6% | 附下载
- 「需求广场」需求词更新明细(三)
- activiti7基础入门、activiti7实战、activiti7运用
- 西安交大2021考研计算机专业复试分数线,西安交通大学2021年研究生复试分数线是多少...
- Android开发:基站定位
- 微软bi报表服务器,升级 Power BI 报表服务器
- 粉色的html 标签,22个粉色主调的网页设计欣赏
热门文章
- back函数php,PHP callback函数使用方法和注意事项
- echarts无数据时显示无数据_无服务器数据库竞技,哪家云服务落伍了?
- 什么情况下使用weak关键字,相比assign有什么不同
- hdu 1540 Tunnel Warfare (线段树维护左右最长连续区间)
- Codeforces Round #187 (Div. 2) D
- 什么是南向接口和北向接口?
- linux下卸载之前安装的qt4和qt5
- 有意思的堪称世界级的电视广告!!:)
- python case when用法_oracle菜鸟学习之 select case when的使用
- qt传递数组给js(支持多组)