Java Base64 编码解码指南
Java 8 及更高版本内置了 java.util.Base64 类,提供了标准的 Base64 编码和解码功能,以下是详细的用法说明:

基本编码和解码
编码示例
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String originalString = "Hello, World!";
// 编码
String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes());
System.out.println("编码后: " + encodedString);
// 解码
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);
System.out.println("解码后: " + decodedString);
}
}
输出结果
编码后: SGVsbG8sIFdvcmxkIQ==
解码后: Hello, World!
URL 安全的 Base64 编码
URL 安全的 Base64 编码使用 和 _ 替代 和 ,并移除填充字符 。
import java.util.Base64;
public class Base64UrlExample {
public static void main(String[] args) {
String originalString = "Hello, World!";
// URL 安全编码
String encodedString = Base64.getUrlEncoder().encodeToString(originalString.getBytes());
System.out.println("URL 安全编码后: " + encodedString);
// URL 安全解码
byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);
System.out.println("URL 安全解码后: " + decodedString);
}
}
MIME 友好的 Base64 编码
MIME 编码会每 76 个字符插入一个换行符,适合在电子邮件等 MIME 环境中使用。
import java.util.Base64;
public class Base64MimeExample {
public static void main(String[] args) {
String originalString = "This is a very long string that will be encoded using MIME Base64 encoding rules.";
// MIME 编码
byte[] encodedBytes = Base64.getMimeEncoder().encode(originalString.getBytes());
String encodedString = new String(encodedBytes);
System.out.println("MIME 编码后:\n" + encodedString);
// MIME 解码
byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedBytes);
String decodedString = new String(decodedBytes);
System.out.println("MIME 解码后: " + decodedString);
}
}
处理字节数组
import java.util.Base64;
public class Base64ByteArrayExample {
public static void main(String[] args) {
byte[] originalBytes = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 编码字节数组
byte[] encodedBytes = Base64.getEncoder().encode(originalBytes);
System.out.println("编码后的字节数组: " + new String(encodedBytes));
// 解码字节数组
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.print("解码后的字节数组: ");
for (byte b : decodedBytes) {
System.out.print(b + " ");
}
}
}
自定义编码器/解码器
import java.util.Base64;
public class Base64CustomExample {
public static void main(String[] args) {
String originalString = "Custom Base64 encoding";
// 创建自定义编码器(可以设置行长度和行分隔符)
Base64.Encoder encoder = Base64.getMimeEncoder(64, System.lineSeparator().getBytes());
String encodedString = encoder.encodeToString(originalString.getBytes());
System.out.println("自定义编码后:\n" + encodedString);
// 创建自定义解码器
Base64.Decoder decoder = Base64.getMimeDecoder();
byte[] decodedBytes = decoder.decode(encodedString);
String decodedString = new String(decodedBytes);
System.out.println("自定义解码后: " + decodedString);
}
}
注意事项
-
Java 版本要求:
java.util.Base64是从 Java 8 开始引入的,更早的版本需要使用第三方库如 Apache Commons Codec。 -
性能考虑:对于大量数据,建议直接操作字节数组而不是字符串,以减少编码/解码过程中的内存开销。
(图片来源网络,侵删) -
错误处理:解码时如果输入不是有效的 Base64 编码,会抛出
IllegalArgumentException。 -
填充字符:标准的 Base64 编码使用 作为填充字符,URL 安全版本通常省略填充字符。
-
线程安全:
java.util.Base64的所有方法都是线程安全的,可以安全地在多线程环境中使用。
涵盖了 Java 中 Base64 编码和解码的主要用法,可以根据具体需求选择合适的编码方式。

