1. 什么是 Base64?

Base64 是一种用 64 个可打印字符(A-Z, a-z, 0-9, +, /)来表示二进制数据的方法。

核心概念:

  • 输入: 任意二进制数据(如图片、文件、加密后的密文等)。
  • 输出: 由 64 个特定 ASCII 字符组成的文本字符串。
  • 原理: 将每 3 个字节(24 位)的二进制数据,重新分组为 4 个 6 位的数据块。每个 6 位的数据块可以表示 0-63 的数值,这个数值再根据一个索引表映射到对应的可打印字符。

2. 为什么需要 Base64?

  1. 兼容文本协议: 确保二进制数据在传输过程中(如通过 HTTP、SMTP)不会被错误地解释或修改,因为这些协议是为文本设计的。
  2. 数据隐藏: 虽然不是加密(很容易解码),但可以对数据进行简单的“混淆”,使其不能直接被读懂。
  3. 在文本中嵌入数据: 例如,在 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. 重要注意事项

  1. 不是加密: Base64 只是一种编码方式,任何人都可以轻松解码。绝不能用于密码或敏感信息的加密。
  2. 数据膨胀: Base64 编码后的数据大小会比原始二进制数据大 about 33%(因为每 3 个字节变成了 4 个字符)。
  3. 性能: Java 8 内置的 Base64 类性能已经非常优秀,通常无需再引入第三方库。
  4. 字符集: 当处理字符串时,务必注意字符集(如 UTF-8)。在调用 getBytes()new String(byte[]) 时,最好明确指定字符集,例如 getBytes(StandardCharsets.UTF_8),以避免平台默认字符集带来的问题。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐