7.1 历史背景
在 Java 8 之前,开发者通常使用第三方库(如 Apache Commons Codec)或内部私有类(如
sun.misc.BASE64Encoder,不推荐)。Java 8 引入了标准的 java.util.Base64
类,彻底解决了这个问题。
7.2 标准编码器(Basic)
用于处理常规的标准 Base64 格式。
import java.util.Base64;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String originalInput = "Hello, World!";
// 编码
String encoded = Base64.getEncoder()
.encodeToString(originalInput.getBytes(StandardCharsets.UTF_8));
System.out.println(encoded);
// 输出: SGVsbG8sIFdvcmxkIQ==
// 解码
byte[] decodedBytes = Base64.getDecoder().decode(encoded);
String decodedString = new String(decodedBytes, StandardCharsets.UTF_8);
System.out.println(decodedString);
// 输出: Hello, World!
}
}
7.3 URL 安全编码器
将 + 和 / 替换为 - 和 _,适用于 URL 参数。
String url = "https://example.com?a=b";
// 编码
String encodedUrl = Base64.getUrlEncoder()
.encodeToString(url.getBytes(StandardCharsets.UTF_8));
// 解码
byte[] decodedUrl = Base64.getUrlDecoder().decode(encodedUrl);
7.4 MIME 编码器
主要用于电子邮件(MIME)。它会每隔 76 个字符插入一个换行符(\r\n),以符合邮件协议的行长限制。
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; ++i) {
sb.append(UUID.randomUUID().toString());
}
// 编码结果包含换行
byte[] initBytes = sb.toString().getBytes(StandardCharsets.UTF_8);
String mimeEncoded = Base64.getMimeEncoder().encodeToString(initBytes);