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
0
投稿
猜你喜欢
- 首先微信公众号开发网页授权登录使用环境:开发工具:eclipse;服务器:tomcat8,开发语言:JAVA。我写的网页授权登录时用开发者模
- C#与C++ dll之间传递字符串string wchar_t* char* IntPtr1、由C#向C++ dll 传入字符串时,参数直接
- 查询返回Map<String,Object>类型mybatis 查询返回Map<String,Object> 类型,
- 目标了解HTTP 请求/响应头及常见的属性;了解如何使用SpringBoot处理头信息 ;了解如何使用SpringBoot处理Cookie
- 本文实例讲述了Java面向接口编程之简单工厂模式。分享给大家供大家参考,具体如下:一 代码interface Output{ /
- 一、常用功能java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下:public static <
- Java 回调函数详解前言:C语言中回调函数解释:回调函数(Callback Function)是怎样一种函数呢?函数是用来被调用的,我们调
- 下面是利用Java实现读写文件功能的示例代码读文件TextRead.javaimport java.io.BufferedReader;im
- 在平时做系统项目时,经常会需要做导出功能,不论是导出excel,还是导出cvs文件。我下面的demo是在springmvc的框架下实现的。1
- 初看 cgaolei 翻译的 Java技巧之双括弧初始化 一文,走马观花,只知用法,未细看后面的解释。蔚为惊艳,心里想 Java 竟然有这么
- 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的
- 一、ArrayList 了解过吗?它是啥?有啥用?众所周知,Java 集合框架拥有两大接口 Collection 和 Map,其中,Coll
- maven插件主要是为maven中生命周期中的阶段服务的,maven中只是定义了3套生命周期,以及每套生命周期中有哪些阶段,具体每个阶段中执
- 在学习操作系统这本书的时候,我们使用的是汤小丹老师的《计算机操作系统》接下来我将会使用java语言去实现内部代码。Swap指令最佳置换算法是
- 以前就遇到过这个问题,今天重新拾起来。跑马灯效果其实就是当文字超过TextView控件宽度的时候,使用滚动的方式显示出来:方法1:(直接xm
- 背景在Java中一个回调的操作是一个在一些操作完成之后被传递到另一个函数中并且被执行的函数。一个回调函数既可以被同步或者异步执行。在一个同步
- ArrayList类List集合的实例化:List<String> l = new ArrayList<String>
- 人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中?这里浅谈Java中的栈和堆首先,将结论写在前
- 一、什么是备忘录模式定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
- Java自定义注解一般使用场景为:自定义注解+ * 或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。本文将先从自定义注解的