工具类-Base64 在 Java中的几个实现方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了工具类-Base64 在 Java中的几个实现方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4828字,纯文字阅读大概需要7分钟。
内容图文
![工具类-Base64 在 Java中的几个实现方式](/upload/InfoBanner/zyjiaocheng/801/f9f5c105370d4877a170c134d43295de.jpg)
文章目录
前言
体能状态先于精神状态,习惯先于决心,聚焦先于喜好
特别声明
本文 列举了 Java 环境下Base64的几种实现方式 ,有几点需要特别声明:
1、部分方法需要下载单独的 jar 包,本文提供了 Maven 依赖地址,可自行下载
2、JDK1.8 提供了目前为止最高效的实现方式,Spring 也单独提供了对JDK1.8方法对封装,所以注意JDK版本
3、本文在一个测试类同时列举多个测试方法,所以常规 import 类的声明无法使用了(因为不同的实现方式的Base64类名字相同),所以我在代码里写了每个工具类的具体路径,实际工作中请恢复成类的头部 import 的引用方式
Base64 的编码和解码不是加密算法
Base64 只是提供了一种对字节转化为字符的一种方式,这种转化不涉及加密和解密
Base64 转化的字符不属于任何一种编码格式,是看不懂的字符串,所以它可以作为不同编码格式之间的中转形式——比如用于网络传输——尽管你也可以直接用字节进行传输
关门,上代码
package com.bestcxx.stu.test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.junit.Test;
/**
* <h3>
* base64 字符串(字符类型)-二进制字节数组-base64字符串-二进制字节数组-字符串(字符类型)
* </h3>
* <p>
* 与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类别绝对是首选!
* </p>
* @author jie.wu
*/
public class Base64Test {
/**
* jdk sun.misc套件
* import sun.misc.BASE64Encoder;
* import sun.misc.BASE64Decoder;
*/
@Test
public void test1() throws UnsupportedEncodingException,IOException{
//编码对象
sun.misc.BASE64Encoder encoder=new sun.misc.BASE64Encoder();
//解码对象
sun.misc.BASE64Decoder decoder=new sun.misc.BASE64Decoder();
//字符串
String temStr="你好";
//字符串>字节数组
byte[] bytesA=temStr.getBytes("UTF8");
//编码:字节数组>base64字符串
String resultA=encoder.encode(bytesA);
//解码:base64字符串>字节数组
byte[] bytesB=decoder.decodeBuffer(resultA);
//字节数组>字符串
String resultB=new String(bytesB,"UTF8");
System.out.println("resultB="+resultB);
}
/**
* bouncy castle
* https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
* import org.bouncycastle.util.encoders.Base64
* @throws UnsupportedEncodingException
*/
@Test
public void test2() throws UnsupportedEncodingException {
org.bouncycastle.util.encoders.Base64 base64=new org.bouncycastle.util.encoders.Base64();
//字符串
String temStr="你好";
//字符串>字节数组
byte[] bytesA=temStr.getBytes("UTF8");
//编码:字节数组>base64字符串
String resultA=base64.toBase64String(bytesA);
//解码:base64字符串>字节数组
byte[] bytesB=base64.decode(resultA);
//字节数组>字符串
String resultB=new String(bytesB,"UTF8");
System.out.println("resultB="+resultB);
}
/**
* commons-codec
* https://mvnrepository.com/artifact/commons-codec/commons-codec
* import org.apache.commons.codec.binary.Base64;
* @throws UnsupportedEncodingException
*/
@Test
public void test3() throws UnsupportedEncodingException {
org.apache.commons.codec.binary.Base64 base64 = new org.apache.commons.codec.binary.Base64();
//字符串
String temStr="你好";
//字符串>字节数组
byte[] bytesA=temStr.getBytes("UTF8");
//编码:字节数组>base64字符串
String resultA=base64.encodeToString(bytesA);
//解码:base64字符串>字节数组
byte[] bytesB=base64.decode(resultA);
//字节数组>字符串
String resultB=new String(bytesB,"UTF8");
System.out.println("resultB="+resultB);
}
/**
* jdk 1.8
* import java.util.Base64
* @throws UnsupportedEncodingException
*/
@Test
public void test4() throws UnsupportedEncodingException {
//编码对象
java.util.Base64.Encoder encoder=java.util.Base64.getEncoder();
//解码对象
java.util.Base64.Decoder decoder=java.util.Base64.getDecoder();
//字符串
String temStr="你好";
//字符串>字节数组
byte[] bytesA=temStr.getBytes("UTF8");
//编码:字节数组>base64字符串
String resultA=encoder.encodeToString(bytesA);
//解码:base64字符串>字节数组
byte[] bytesB=decoder.decode(resultA);
//字节数组>字符串
String resultB=new String(bytesB,"UTF8");
System.out.println("resultB="+resultB);
}
/**
* Spring core
* https://mvnrepository.com/artifact/org.springframework/spring-core
* import org.springframework.util.Base64Utils
* 看源码可以看到内部也提供了对 jdk1.8 提供对方法的封装-据说 jdk1.8 是效率最高的
* @throws UnsupportedEncodingException
*/
@Test
public void test5() throws UnsupportedEncodingException {
//字符串
String temStr="你好";
//字符串>字节数组
byte[] bytesA=temStr.getBytes("UTF8");
//编码:字节数组>base64字符串
String resultA=org.springframework.util.Base64Utils.encodeToString(bytesA);
//解码:base64字符串>字节数组
byte[] bytesB=org.springframework.util.Base64Utils.decodeFromString(resultA);
//字节数组>字符串
String resultB=new String(bytesB,"UTF8");
System.out.println("resultB="+resultB);
}
}
参考链接
[1]、https://www.cnblogs.com/alter888/p/9140732.html
[2]、 https://blog.csdn.net/u012187452/article/details/83239117
[3]、 https://www.zhihu.com/question/38036594
内容总结
以上是互联网集市为您收集整理的工具类-Base64 在 Java中的几个实现方式全部内容,希望文章能够帮你解决工具类-Base64 在 Java中的几个实现方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。