Java 8 Base64 编码解码

Base64 是一种常见的字符编码解码方式,一般用于将二进制数据编码为更具可读性的 Base64 进制格式。

Java 6 ( JDK 1.6 ) 之前, JDK 一直没有包含 Base64 的实现类。因此大部分人都使用 Sum/Orale JDK 里面的 sun.misc.BASE64Encodesun.misc.BASE64Decode。然后这也成为很多 Java 开发者的习惯。一直沿用到今天的 Java8 中还有人在用。

JDK 1.6虽然添加了 Base64 的实现。但是,非常隐秘,竟然是在 javax.xml.bind 包下的 DatastypeConvert 类中的两个静态方法 parseBase64BinaryprintBase64Binary.

Java 8终于把 Base64 扶正了,在 java.util 包下提供了 Base64 类用于编码和解码 Base64 数据。

Java 8 java.util.Base64

Java 8中的 java.util.Base64 类提供了三种类型的 Base64 编码解码格式:

1、 简单类型( simple ) : 编码字符只包含 A-Za-z0-9+/ 等 64 个字符。且编码的时候不会包含任何换行符 ( \r 、 \n 、\r\n )。解码的时候也只会解码 A-Za-z0-9+/ 内的字符,超出的则会被拒绝。
2、 URL : 编码字符只包含 A-Za-z0-9+_64 个字符。和 简单 相比,就是把 / 换成了_ 。因为没有 / 字符,因此这种编码方式非常适合 URL 和文件名等。
3、 MIME : 编码会被映射为 MIME 友好格式:每一行输出不超过 76 个字符,而且每行以 \r\n 符结束。但末尾行并不会包含 \r\n

内部类

java.util.Base64 还包含了两个内部静态类,分别实现了 RFC 4648RFC 2045 中规范的 Base64 编码和解码方式。

内部类 说明
static class Base64.Decoder 该类实现使用 RFC 4648 和 RFC 2045 中规定的 Base64 解码方案解码数据
static class Base64.Encoder 该类实现使用 RFC 4648 和 RFC 2045 中规定的 Base64 编码方案编码数据

每个内部类的方法详情,请直接点击相关 URL 查看。

静态方法

java.util.Base64 类提供的都是静态方法。下表列出了这些静态方法

方法 说明
Base64.Decoder getDecoder() 返回一个 Base64.Decoder 类型的 简单 解码器
Base64.Encoder getEncoder() 返回一个 Base64.Encoder 类型的 简单 编码器
Base64.Decoder getMimeDecoder() 返回一个 Base64.Decoder 类型的 MIME 解码器
Base64.Encoder getMimeEncoder() 返回一个 Base64.Encoder 类型的 MINE 编码器
Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator) 返回一个 Base64.Encoder 类型的使用特定长度和行分隔符的 MINE 编码器
Base64.Decoder getUrlDecoder() 返回一个 Base64.Decoder 类型的 URL 和文件名安全的解码器
Base64.Encoder getUrlEncoder() 返回一个 Base64.Encoder 类型的 URL 和文件名安全的编码器

范例一: 基本的编码解码器

我们写一个范例演示下 getDecoder()getEncoder() 两个方法

Base64Test编码解码

@Test
public void Base64Test() {try {String text = "Java 8 Base64 编码解码 - Java8新特性";String base64encodedString = Base64.getEncoder().encodeToString(text.getBytes("utf-8"));System.out.println(base64encodedString);byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);System.out.println(new String(base64decodedBytes, "utf-8"));} catch (UnsupportedEncodingException e) {System.out.println("异常:" + e.getMessage());}
}
/*
执行结果:SmF2YSA4IEJhc2U2NCDnvJbnoIHop6PnoIEgLSBKYXZhOOaWsOeJueaApw==Java 8 Base64 编码解码 - Java8新特性
*/

范例二: URL 和文件名安全的编码解码器

我们写一个范例演示下 getUrlEncoder()getUrlDecoder() 两个方法

Base64Test编码解码

@Test
public void Base64Test() {try {String text = "Java 8 Base64 编码解码 - Java8新特性";String base64encodedString = Base64.getUrlEncoder().encodeToString(text.getBytes("utf-8"));System.out.println(base64encodedString);byte[] base64decodedBytes = Base64.getUrlDecoder().decode(base64encodedString);System.out.println(new String(base64decodedBytes, "utf-8"));} catch (UnsupportedEncodingException e) {System.out.println("异常:" + e.getMessage());}
}
/*
执行结果:SmF2YSA4IEJhc2U2NCDnvJbnoIHop6PnoIEgLSBKYXZhOOaWsOeJueaApw==Java 8 Base64 编码解码 - Java8新特性
*/

范例三:MIME Base64 编码解码器

我们写一个范例演示下 getMimeEncoder()getMimeDecoder() 两个方法

Base64Test编码解码

@Test
public void Base64Test() {try {StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < 5; ++i) {stringBuilder.append(UUID.randomUUID());}byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);System.out.println(mimeEncodedString+"\n");byte[] base64decodedBytes = Base64.getMimeDecoder().decode(mimeEncodedString);System.out.println(new String(base64decodedBytes, "utf-8"));} catch (UnsupportedEncodingException e) {System.out.println("异常:" + e.getMessage());}
}
/*
执行结果:M2EzOWFhMTYtZWRkMS00ZDI2LTg2YTAtYmJhZWNkOTkwNWI2ZjA2MjE2NzgtYzdlZi00ODRhLTlhY2ItZDdmM2M5ODVmMWY3NDg1Nzk4NzItZWM1OC00ZWEwLWE4ZjctYzIzMTFhN2Q1MDUzMzZhMzhjNmQtOWUzYy00NjBiLWE2MTQtYTE4YzQwMTYxYTliZmVlNzgxMDAtZjMzNi00ZmU4LTg0ZTYtZWFiMzIwODcyMzIy3a39aa16-edd1-4d26-86a0-bbaecd9905b6f0621678-c7ef-484a-9acb-d7f3c985f1f748579872-ec58-4ea0-a8f7-c2311a7d505336a38c6d-9e3c-460b-a614-a18c40161a9bfee78100-f336-4fe8-84e6-eab320872322*/

是不是看不出来有 76 个字符分割 ? 没关系,我们使用另一个getMimeEncoder(int lineLength, byte[] lineSeparator) 重载方法试一下

Base64Test编码解码

@Test
public void Base64Test() {try {StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < 5; ++i) {stringBuilder.append(UUID.randomUUID().toString());}byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");String mimeEncodedString = Base64.getMimeEncoder(32, "@~@\n\n".getBytes("utf-8")).encodeToString(mimeBytes);System.out.println(mimeEncodedString+"\n-----------分隔线--------------");byte[] base64decodedBytes = Base64.getMimeDecoder().decode(mimeEncodedString);System.out.println(new String(base64decodedBytes, "utf-8"));} catch (UnsupportedEncodingException e) {System.out.println("异常:" + e.getMessage());}
}
/*
执行结果:N2ViMjI3ODQtODUwMy00YmNhLWI5Njct@~@ZTEzZTY0MmEzYjc2YjM4ZmI4MDMtMDEw@~@Yi00NzE2LWE3MDgtNmRmMmM4NDkyN2Vl@~@M2IzNzA3MzEtNGQ3Yi00NmY3LThiOTMt@~@ZTc3OGJjMmExM2I5N2QyNDlmN2EtNzE4@~@Zi00ZDU4LWFmYzQtZTI3YjMwNzVkMWIz@~@MmFkOWZlZWItYWI5Yy00N2RlLWIyNzQt@~@MjI5YTY2N2QyYmMx-----------分隔线--------------7eb22784-8503-4bca-b967-e13e642a3b76b38fb803-010b-4716-a708-6df2c84927ee3b370731-4d7b-46f7-8b93-e778bc2a13b97d249f7a-718f-4d58-afc4-e27b3075d1b32ad9feeb-ab9c-47de-b274-229a667d2bc1
*/

在这个范例中,我们每隔 32 个字符就分割一次。且使用 @~@\n\n 作为分隔符。

Java 8 Base64 编码解码相关推荐

  1. java svgbase64转byte_java 图片进行base64 编码解码

    java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...

  2. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  3. Java实现Base64编码和解码的方式

    Base64 编码是什么? Base64 是一种编码的方式, 并不是安全领域的加密解密算法. Base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输. 因为有些系统只能使用ASCII字符 ...

  4. Java工程中引用Base64编码解码小记

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...

  5. Java实现BASE64编解码

    Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...

  6. Java对base64编解码总结

    概述 java对base64编解码的通用处理方法. 关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Bina ...

  7. js base64 编码解码

    js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...

  8. python使用base64编码解码数据

    python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...

  9. openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    openssl 加密字符串的方法: 一.利用openssl命令进行BASE64编码解码(base64 encode/decode): 1. BASE64编码命令 对字符串'abc'进行base64编码 ...

  10. 一些Base64编码/解码及数据压缩/解压方面的知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

最新文章

  1. sap转换成基本订单单位
  2. 中心极限定理_High Dimensional Probability(1) 中心极限定理
  3. 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了
  4. 电脑提示0xc0000719设备未迁移如何解决
  5. java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用
  6. Python的subprocess模块(二)
  7. 访问一下互联网中的IPV6主机
  8. 华中科技大学2005年计算机组成原理试题,华中科技大学2005年计算机组成原理试题...
  9. 利用Struts拦截器完成文件上传功能
  10. 设计模式之生成器模式
  11. caffe中 softmax 函数的前向传播和反向传播
  12. 【泛融顾问分享】互联网金融未来走向预测
  13. 鸿蒙OS原子化服务卡片原理和架构分析
  14. 期货开户手续费的秘密成了透明
  15. WebGL和OpenGL的区别及关系
  16. [九度][何海涛] 字符串的排序
  17. 小米机型root刷magisk面具教程(非联发科处理器机型)不用刷入第三方twrp(recovery)
  18. debug功能使用解析
  19. 文件强制卸载工具geekuninstaller
  20. APICloud联合腾讯云推出“云主机解决方案“,各种福利等你拿

热门文章

  1. bzoj 1046: [HAOI2007]上升序列【dp+二分】
  2. 第十章 嵌入式linux的调试技术
  3. 创建5个组,然后把30个用户分别加入到5个组中
  4. 服务器保持与Mysql的连接
  5. ASP实现AJAX的几种方式!
  6. 双点双向路由引入/路由重发布
  7. vs2017html乱码,vs2017引用vue组件中文乱码
  8. VXLAN配置实例(一)——VXLAN基本配置
  9. Java找到二维数组中的最大值并打印坐标
  10. k8s升级从1.13到1.16教程与采坑解决办法