Java8新特性——Base64编码与解码
一、概述
- 定义:Base64是一种可逆的编码方式,是一种用64个ASCII字符来表示任意二进制数据的方法。主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成ASCII字符。
- 在Java 8中,Base64编码已经成为Java类库的标准。Java 8 内置了 Base64 编码的编码器和解码器,存放于java.util包。
- Base64工具类提供了一套静态方法获取下面三种BASE64编、解码器:
基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。 URL:输出映射到一组字符A-Za-z0-9+_,输出是URL和文件。 MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用’
’并跟随’
’作为分割。编码输出最后没有行分割。
二、编码与解码
public static void encode() {
try {
// 1.基本编码与解码
String encodeStr1 = Base64.getEncoder().encodeToString("Hello World!".getBytes("utf-8"));
byte[] encodeByte1 = Base64.getDecoder().decode(encodeStr1);
System.out.println("Base64 编码字符串 (基本) :" + encodeStr1);
System.out.println("解码为原始字符串: " + new String(encodeByte1, "utf-8"));
// 2.URL编码与解码
String encodeStr2 = Base64.getUrlEncoder().encodeToString("http://www.baidu.com".getBytes("utf-8"));
byte[] encodeByte2 = Base64.getUrlDecoder().decode(encodeStr2);
System.out.println("Base64 编码字符串 (URL) :" + encodeStr2);
System.out.println("解码为原始字符串: " + new String(encodeByte2, "utf-8"));
// 3.MIME编码与解码
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 10; ++i) {
stringBuilder.append(UUID.randomUUID());
}
byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
String encodeStr3 = Base64.getMimeEncoder().encodeToString(mimeBytes);
byte[] encodeByte3 = Base64.getMimeDecoder().decode(encodeStr3);
System.out.println("Base64 编码字符串 (MIME) :" + encodeStr3);
System.out.println("解码为原始字符串: " + new String(encodeByte3, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}