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编码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot项目中Controller接收两个实体的实现方法

    SpringBoot项目中Controller接收两个实体的实现方法

    本文主要介绍了SpringBoot项目中Controller接收两个实体的实现方法,主要介绍了两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • JMeter导入自定义的Jar包的详解教程

    JMeter导入自定义的Jar包的详解教程

    这篇文章主要介绍了JMeter导入自定义的Jar包的详解教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java中分割字符串的两种方法实例详解

    Java中分割字符串的两种方法实例详解

    这篇文章主要介绍了Java中分割字符串的两种方法,一种是java.lang.String 的 split() 方法,,另外一种是用String Tokenizer类。文中的每种方法都给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧。
    2016-12-12
  • java文件操作之Path,Paths,Files

    java文件操作之Path,Paths,Files

    Java7中文件IO发生了很大的变化,专门引入了很多新的类,下面给大家分享用Files作为一个操作类的实例,需要的朋友可以参考
    2017-04-04
  • Java中super关键字详解

    Java中super关键字详解

    这篇文章主要为大家详细介绍了Java中super关键字,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Spring boot集成Kafka消息中间件代码实例

    Spring boot集成Kafka消息中间件代码实例

    这篇文章主要介绍了Spring boot集成Kafka消息中间件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot带你实现一个点餐小程序

    SpringBoot带你实现一个点餐小程序

    有个小伙伴临时找到我,要开发一个点餐的系统,时间比较着急,给了2天的时间。马马虎虎的搞出来了,头发掉了一撮!下面介绍下本系统,感兴趣的小伙伴,可以参考开发下
    2022-07-07
  • 使用feign传递参数类型为MultipartFile的问题

    使用feign传递参数类型为MultipartFile的问题

    这篇文章主要介绍了使用feign传递参数类型为MultipartFile的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot过滤器和拦截器的实例代码

    springboot过滤器和拦截器的实例代码

    这篇文章主要介绍了springboot过滤器和拦截器的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Java生成条形码code128(亲测有效)

    Java生成条形码code128(亲测有效)

    这篇文章主要介绍了Java生成条形码code128,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论