Java 8 Base64 编解码:标准、URL 安全、MIME 三种模式一网打尽
Java 8 终于在标准库中内置了 Base64 编解码支持(java.util.Base64),提供三种编码模式:
- Basic(标准):字符集 A-Z a-z 0-9 + /,无换行,解码时拒绝非法字符。
- URL 安全:字符集 A-Z a-z 0-9 + _,适合 URL 与文件名,无换行。
- MIME:按 RFC 2045 格式,每行不超过 76 字符,以 CRLF(\r\n)分隔,末尾无分隔符。
嵌套类
| 序号 | 嵌套类与说明 |
|---|---|
| 1 | static class Base64.Decoder — 实现 RFC 4648 和 RFC 2045 定义的解码器。 |
| 2 | static class Base64.Encoder — 实现 RFC 4648 和 RFC 2045 定义的编码器。 |
常用静态工厂方法
| 序号 | 方法与说明 |
|---|---|
| 1 | static Base64.Decoder getDecoder() — 返回标准解码器。 |
| 2 | static Base64.Encoder getEncoder() — 返回标准编码器。 |
| 3 | static Base64.Decoder getMimeDecoder() — 返回 MIME 解码器。 |
| 4 | static Base64.Encoder getMimeEncoder() — 返回 MIME 编码器(默认 76 字符/行)。 |
| 5 | static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator) — 自定义行长与分隔符的 MIME 编码器。 |
| 6 | static Base64.Decoder getUrlDecoder() — 返回 URL 安全解码器。 |
| 7 | static Base64.Encoder getUrlEncoder() — 返回 URL 安全编码器。 |
类继承自 java.lang.Object。
完整示例
import java.util.Base64;
import java.util.UUID;
import java.io.UnsupportedEncodingException;
public class HelloWorld {
public static void main(String[] args) {
try {
String input = "TutorialsPoint?java8";
byte[] bytes = input.getBytes("utf-8");
// 标准编解码
String basicEncoded = Base64.getEncoder().encodeToString(bytes);
System.out.println("Basic 编码: " + basicEncoded);
byte[] basicDecoded = Base64.getDecoder().decode(basicEncoded);
System.out.println("原文: " + new String(basicDecoded, "utf-8"));
// URL 安全编码
String urlEncoded = Base64.getUrlEncoder().encodeToString(bytes);
System.out.println("URL 编码: " + urlEncoded);
// MIME 编码(长字符串演示分行)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
sb.append(UUID.randomUUID().toString());
}
byte[] mimeBytes = sb.toString().getBytes("utf-8");
String mimeEncoded = Base64.getMimeEncoder().encodeToString(mimeBytes);
System.out.println("MIME 编码:\n" + mimeEncoded);
} catch (UnsupportedEncodingException e) {
System.err.println("编码错误: " + e.getMessage());
}
}
}
运行结果片段
Basic 编码: VHV0b3JpYWxzUG9pbnQ/amF2YTg= 原文: TutorialsPoint?java8 URL 编码: VHV0b3JpYWxzUG9pbnQ_amF2YTg= MIME 编码: YmU3NWY2ODktNGM5YS00ODlmLWI2MTUtZTVkOTk2YzQ1Njk1Y2EwZTg2OTEtMmRiZC00YTQ1LWJl NTctMTI1MWUwMTk0ZWQyNDE0NDAwYjgtYTYxOS00NDY5LTllYTctNjc1YzE3YWJhZTk1MTQ2MDQz NDItOTAyOC00ZWI0LThlOTYtZWU5YzcwNWQyYzVhMTQxMWRjYTMtY2MwNi00MzU0LTg0MTgtNGQ1 MDkwYjdiMzg2ZTY0OWU5MmUtZmNkYS00YWEwLTg0MjQtYThiOTQxNDQ2YzhhNTVhYWExZjItNjU2 Mi00YmM4LTk2ZGYtMDE4YmY5ZDZhMjkwMzM3MWUzNDMtMmQ3MS00MDczLWI0Y2UtMTQxODE0MGU5 YjdmYTVlODUxYzItN2NmOS00N2UyLWIyODQtMThlMWVkYTY4M2Q1YjE3YTMyYmItZjllMS00MTFk LWJiM2UtM2JhYzUxYzI5OWI4
java
- 编码器基础:设计 2-1 与 7 段二进制编码器
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比