JAVA实现Base64编码的三种方式

 更新时间:2022年06月27日 11:30:41   作者:howeres  
本文主要介绍了JAVA实现Base64编码的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

定义: 二进制文件可视化

Base64 是一种能将任意二进制文件用 64 种字元组合成字串的方法, 彼此之间是可以互相转换的. 也常用来表示字串加密后的内容, 例如电子邮件 (很多文本混杂大量 加号、/、大小写字母、数字和等号,一看就知道是 Base64)

Base64 编码步骤:

  • 第一步,将每三个字节作为一组,一共是24个二进制位
  • 第二步,将这24个二进制位分为四组,每个组有6个二进制位 (因为 6 位 2 进制最大数为 63)
  • 第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节
  • 第四步,根据序号表(0-63),得到扩展后的每个字节的对应符号就是Base64的编码值

sun 包下的 BASE64Encoder

早期在 Java 上做 Base64 的编码与解码, 会使用到 JDK 里的 sun.misc 套件下的 BASE64Encoder 和 BASE64Decoder 这两个类, 缺点是编码和解码的效率不高

final BASE64Encoder encoder = new BASE64Encoder();
final BASE64Decoder decoder = new BASE64Decoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encode(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));

apache 包下的 Base64

比 sun 包更精简,实际执行效率高不少, 缺点是需要引用 Apache Commons Codec, 但 tomcat 容器下开发, 一般都自动引入可直接使用.

final Base64 base64 = new Base64();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = base64.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(base64.decode(encodedText), "UTF-8"));

util 包下的 Base64 (jdk8)

java 8 的 java.util 包下 Base64 类, 可用来处理 Base64 的编码与解码

final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

Java 8 提供的 Base64 效率最高. 实际测试编码与解码速度, Java 8 的 Base64 要比 sun包下的要快大约 11 倍,比 Apache 的快大约 3 倍.

到此这篇关于JAVA实现Base64编码的三种方式的文章就介绍到这了,更多相关JAVA Base64编码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • des加密解密JAVA与.NET互通实例

    des加密解密JAVA与.NET互通实例

    这篇文章主要介绍了des加密解密JAVA与.NET互通实例,大家参考使用吧
    2013-12-12
  • swing分割窗口控件JSplitPane使用方法详解

    swing分割窗口控件JSplitPane使用方法详解

    这篇文章主要为大家详细介绍了swing分割窗口控件JSplitPane的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 阅读EnumSet抽象类源码

    阅读EnumSet抽象类源码

    这篇文章主要介绍了阅读EnumSet抽象类源码,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • MyBatis解决Update动态SQL逗号的问题

    MyBatis解决Update动态SQL逗号的问题

    这篇文章主要介绍了MyBatis解决Update动态SQL逗号的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java之理解多态详解

    Java之理解多态详解

    大家好,本篇文章主要讲的是Java之理解多态详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 详解Java事件编程的使用

    详解Java事件编程的使用

    Java事件在很多地方都可以使用,合理的使用事件编程,相比常规逻辑的编程,这可达到主次分明,让程序吞吐量即处理能力更强,改动更少,下面我们举一个例子说明如何使用Java使用,需要的朋友可以参考下
    2021-06-06
  • SpringBoot http请求注解@RestController原理解析

    SpringBoot http请求注解@RestController原理解析

    这篇文章主要介绍了SpringBoot http请求注解@RestController原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 数组实现Java 自定义Queue队列及应用操作

    数组实现Java 自定义Queue队列及应用操作

    这篇文章主要介绍了数组实现Java 自定义Queue队列及应用操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 详解Java SpringAOP切面类

    详解Java SpringAOP切面类

    这篇文章主要为大家介绍了Java SpringAOP的切面类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Redis缓存,泛型集合与json字符串的相互转换实例

    Redis缓存,泛型集合与json字符串的相互转换实例

    这篇文章主要介绍了Redis缓存,泛型集合与json字符串的相互转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论