Java 中的 Base64
·
1. 什么是 Base64?
Base64 是一种用 64 个可打印字符(A-Z, a-z, 0-9, +, /)来表示二进制数据的方法。
核心概念:
- 输入: 任意二进制数据(如图片、文件、加密后的密文等)。
- 输出: 由 64 个特定 ASCII 字符组成的文本字符串。
- 原理: 将每 3 个字节(24 位)的二进制数据,重新分组为 4 个 6 位的数据块。每个 6 位的数据块可以表示 0-63 的数值,这个数值再根据一个索引表映射到对应的可打印字符。
2. 为什么需要 Base64?
- 兼容文本协议: 确保二进制数据在传输过程中(如通过 HTTP、SMTP)不会被错误地解释或修改,因为这些协议是为文本设计的。
- 数据隐藏: 虽然不是加密(很容易解码),但可以对数据进行简单的“混淆”,使其不能直接被读懂。
- 在文本中嵌入数据: 例如,在 HTML 或 CSS 中嵌入图片(Data URL)、在 XML/JSON 中传输二进制字段。
3. Java 中的 Base64(Java 8 及以上)
在 Java 8 之前,开发者通常使用第三方库(如 Apache Commons Codec)或自己实现 Base64。从 Java 8 开始,标准库 java.util 包中引入了功能完善且性能良好的 Base64 类。
java.util.Base64 是一个工具类,它本身不能被实例化。它提供了三种不同的 Base64 编解码器,通过静态方法获取:
3.1 基本编码器 (Base64.getEncoder())
3.2 URL 编码器 (Base64.getUrlEncoder())
3.3 MIME 编码器 (Base64.getMimeEncoder())
4. 核心类和方法总结
| 类/接口 | 方法 | 描述 |
|---|---|---|
java.util.Base64 |
static Encoder getEncoder() |
返回基本 Base64 编码器 |
static Decoder getDecoder() |
返回基本 Base64 解码器 | |
static Encoder getUrlEncoder() |
返回 URL 安全的 Base64 编码器 | |
static Decoder getUrlDecoder() |
返回 URL 安全的 Base64 解码器 | |
static Encoder getMimeEncoder() |
返回 MIME Base64 编码器 | |
static Decoder getMimeDecoder() |
返回 MIME Base64 解码器 | |
Base64.Encoder |
String encodeToString(byte[] src) |
将字节数组编码为 Base64 字符串 |
byte[] encode(byte[] src) |
将字节数组编码为字节数组 | |
Base64.Decoder |
byte[] decode(String src) |
将 Base64 字符串解码为字节数组 |
byte[] decode(byte[] src) |
将 Base64 字节数组解码为原始字节数组 |
5. 重要注意事项
- 不是加密: Base64 只是一种编码方式,任何人都可以轻松解码。绝不能用于密码或敏感信息的加密。
- 数据膨胀: Base64 编码后的数据大小会比原始二进制数据大 about 33%(因为每 3 个字节变成了 4 个字符)。
- 性能: Java 8 内置的
Base64类性能已经非常优秀,通常无需再引入第三方库。 - 字符集: 当处理字符串时,务必注意字符集(如 UTF-8)。在调用
getBytes()和new String(byte[])时,最好明确指定字符集,例如getBytes(StandardCharsets.UTF_8),以避免平台默认字符集带来的问题。
更多推荐


所有评论(0)