Java 8 Base64 编码解码
Java 8 Base64 编码解码
Base64
是一种常见的字符编码解码方式,一般用于将二进制数据编码为更具可读性的 Base64
进制格式。
在 Java 6 ( JDK 1.6 )
之前, JDK
一直没有包含 Base64
的实现类。因此大部分人都使用 Sum/Orale JDK
里面的 sun.misc.BASE64Encode
和sun.misc.BASE64Decode
。然后这也成为很多 Java
开发者的习惯。一直沿用到今天的 Java8
中还有人在用。
JDK 1.6
虽然添加了 Base64
的实现。但是,非常隐秘,竟然是在 javax.xml.bind
包下的 DatastypeConvert
类中的两个静态方法 parseBase64Binary
和 printBase64Binary
.
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 4648
和 RFC 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 编码解码相关推荐
- java svgbase64转byte_java 图片进行base64 编码解码
java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...
- Java Base64 编码解码方案总结
转载自 Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...
- Java实现Base64编码和解码的方式
Base64 编码是什么? Base64 是一种编码的方式, 并不是安全领域的加密解密算法. Base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输. 因为有些系统只能使用ASCII字符 ...
- Java工程中引用Base64编码解码小记
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...
- Java实现BASE64编解码
Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...
- Java对base64编解码总结
概述 java对base64编解码的通用处理方法. 关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Bina ...
- js base64 编码解码
js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...
- python使用base64编码解码数据
python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...
- openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
openssl 加密字符串的方法: 一.利用openssl命令进行BASE64编码解码(base64 encode/decode): 1. BASE64编码命令 对字符串'abc'进行base64编码 ...
- 一些Base64编码/解码及数据压缩/解压方面的知识
一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...
最新文章
- sap转换成基本订单单位
- 中心极限定理_High Dimensional Probability(1) 中心极限定理
- 市面上有哪几种门_选择 low-e门窗玻璃,你想知道的都在这了
- 电脑提示0xc0000719设备未迁移如何解决
- java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用
- Python的subprocess模块(二)
- 访问一下互联网中的IPV6主机
- 华中科技大学2005年计算机组成原理试题,华中科技大学2005年计算机组成原理试题...
- 利用Struts拦截器完成文件上传功能
- 设计模式之生成器模式
- caffe中 softmax 函数的前向传播和反向传播
- 【泛融顾问分享】互联网金融未来走向预测
- 鸿蒙OS原子化服务卡片原理和架构分析
- 期货开户手续费的秘密成了透明
- WebGL和OpenGL的区别及关系
- [九度][何海涛] 字符串的排序
- 小米机型root刷magisk面具教程(非联发科处理器机型)不用刷入第三方twrp(recovery)
- debug功能使用解析
- 文件强制卸载工具geekuninstaller
- APICloud联合腾讯云推出“云主机解决方案“,各种福利等你拿