java base64编码、解码的三种方式总结
作者:Marydon 发布时间:2022-12-29 22:20:51
标签:java,base64,编码,解码
1.用法介绍
方式一:DatatypeConverter
说明:使用jdk自带的DatatypeConverter.java类实现,但是jdk版本必须>=1.6。
import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;
编码
/**
* base64编码之方法一
* @explain DatatypeConverter.java实现
* @param str
* 待编码字符串
* @return 编码字符串
*/
public static String encode(String str) {
// base64字符串
String base64Str = "";
try {
// String-->byte[]
byte[] data = str.getBytes("utf-8");
// 编码
base64Str = DatatypeConverter.printBase64Binary(data);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return base64Str;
}
解码
/**
* base64解码之方法一
* @explain DatatypeConverter.java实现
* @param base64Str
* 待解码字符串
* @return 解码字符串
*/
public static String decode(String base64Str) {
// 解码后的字符串
String str = "";
// 解码
byte[] base64Data = DatatypeConverter.parseBase64Binary(base64Str);
try {
// byte[]-->String
str = new String(base64Data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
方式二:Base64
说明:使用jdk自带的Base64.java类实现,但是jdk版本必须>=1.8。
import java.io.UnsupportedEncodingException;
import java.util.Base64;
编码
/**
* base64编码之方法二
* @explain Base64.java实现
* @param str
* 待编码字符串
* @return 编码字符串
*/
public static String encode2(String str) {
// base64字符串
String base64Str = "";
try {
// String-->byte[]
byte[] data = str.getBytes("utf-8");
// 编码
base64Str =Base64.getEncoder().encodeToString(data);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return base64Str;
}
解码
/**
* base64解码之方法二
* @explain Base64.java实现
* @param base64Str
* 待解码字符串
* @return 解码字符串
*/
public static String decode2(String base64Str) {
// 解码后的字符串
String str = "";
// 解码
byte[] base64Data = Base64.getDecoder().decode(base64Str);
try {
// byte[]-->String
str = new String(base64Data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
方式三:Base64
所需jar包:commons-codec.jar
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
编码
/**
* base64编码之方法三
* @explain Base64.java实现
* @param str
* 待编码字符串
* @return 编码字符串
*/
public static String encode3(String str) {
// base64字符串
String base64Str = "";
try {
// String-->byte[]
byte[] data = str.getBytes("utf-8");
// 编码
base64Str =Base64.encodeBase64String(data).replaceAll("\r\n", "");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return base64Str;
}
解码
/**
* base64解码之方法三
* @explain Base64.java实现
* @param base64Str
* 待解码字符串
* @return 解码字符串
*/
public static String decode3(String base64Str) {
// 解码后的字符串
String str = "";
// 解码
byte[] base64Data = Base64.decodeBase64(base64Str);
try {
// byte[]-->String
str = new String(base64Data, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
2.测试
public static void main(String[] args) {
String str = "http://www.cnblogs.com/Marydon20170307";
String base64 = Base64Utils.encode(str);// aHR0cDovL3d3dy5jbmJsb2dzLmNvbS9NYXJ5ZG9uMjAxNzAzMDc=
System.out.println(base64);
String str2 = Base64Utils.decode(base64);
System.out.println(str.equals(str2));// true
}
3.效率比较
快-->慢:方式二 > 方式一 > 方式三
因此,如果项目用的是jdk1.8,最佳选择是方式二;jdk1.6,最佳选择是方式一。
来源:https://www.cnblogs.com/Marydon20170307/p/9358776.html


猜你喜欢
- Android对sdcard扩展卡文件的操作其实就是普通的文件操作,但是仍然有些地方需要注意。比如:1.加入sdcard操作权限;2.确认s
- 本文实例讲述了C#验证码识别基础方法,是非常实用的技巧。分享给大家供大家参考。具体方法分析如下:背景最近有朋友在搞一个东西,已经做的挺不错了
- 一、代理模式代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机
- 下拉刷新在越来越多的App中使用,已经形成一种默认的用户习惯,遇到列表显示的内容时,用户已经开始习惯性的拉拉。在交互习惯上已经形成定性。之前
- 这篇文章主要介绍了java内存泄漏与内存溢出关系解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 本文实例为大家分享了android自定义imageview实现圆角图片的具体代码,供大家参考,具体内容如下自定义图片的属性,对图片进行圆角切
- 基本要点1、Lombok作用:在我们的实体类中,我们再也不需要声明get、set、有参无参等方法,统统可以通过Lombok注解来实现同样的功
- 常用事件的分类Java AWT里面的事件可以简单的分为窗体事件(WindowEvent),鼠标事件(MouseEvent),键盘事件(Key
- 微信支付流程都是我自己工作中开发的,亲测可用,不喜勿喷。controller中我是这么写的,你们需要根据自己的业务需求改动。Response
- 前言今天想到了一个问题,如果一个依赖只有子模块用到了,是放入子模块的 pom.xml 呢,还是放入父模块的 pom.xml 呢?理论上当然是
- 本文实例为大家分享了C语言实现五子棋游戏的具体代码,供大家参考,具体内容如下一、实现的目的和意义1、巩固和加深对c语言知识的理解2、学会使用
- 一直以来不是怎么清楚自旋锁,最近有点时间,好好的学习了一下;所谓的自旋锁在我的理解就是多个线程在尝试获取锁的时候,其中一个线程获取锁之后,其
- 解决Long型数据转换成json格式时丢失精度最近项目中突然发现雪花算法生成的数据库主键id返回给前端时和本身的值不一致,于是后端进行断点调
- 概述动态SQL:SQL语句会随着用户输入或外部条件的变化而变化 。例如:我们在做多条件查询的时候,编写SQL语句的查询操作,我们并不知道用户
- 前言在前面的篇章中,对Java语言的简单数据类型、数组、运算符和表达式以及流程控制的方法做了详细介绍。从本章开始,我们正式介绍面向对象的程序
- Android studio 出现 Unsupported major.minor version 52.0解决办法 最近更新了
- 写在前面的废话 下载文件,几乎是所有APP都会用到的功能!算了,还是不废话了,直接开写吧。。。 简单使用 完成
- 真正的帮助大家理解红黑树:一、红黑树所处数据结构的位置:在JDK源码中, 有treeMap和JDK8的HashMap都用到了红黑树去存储红黑
- 一、前言 Android 中解决滑动的方案有2种:外部拦截法 和内部拦截法。 滑动冲突也存在2种场景: 横竖滑动冲突、同向滑动冲突。 所以我
- 网络通信协议中的UDP通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到