java 8起,base64编码解码由java.util.base64类提供标准支持,核心是将二进制数据转为可打印ascii字符串以适配文本协议;含标准、url安全(-/_替代+/,可无填充)和mime(每76字符换行)三类编码器,支持流式处理大文件。

Java 中 Base64 编码和解码主要靠 java.util.Base64 类完成,它从 Java 8 开始成为标准 API,稳定、安全、无需额外依赖。核心不是“加密”,而是把二进制数据转成可打印的 ASCII 字符串,方便在文本协议(如 JSON、HTTP Header、URL 参数)中传输。
标准 Base64 编码与解码
适用于一般场景,比如配置项存储、日志记录、简单数据封装。
- 编码:用
Base64.getEncoder().encodeToString(byte[])将字节数组转为 Base64 字符串 - 解码:用
Base64.getDecoder().decode(String)把 Base64 字符串还原为原始字节数组 - 注意字符集:建议显式指定 UTF-8,避免平台默认字符集导致乱码,例如
str.getBytes(StandardCharsets.UTF_8)
URL 安全的 Base64 变体
当 Base64 字符串要放在 URL、Cookie 或文件名里时,标准编码中的 + 和 / 会引发解析问题,= 填充也可能被截断。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 改用
Base64.getUrlEncoder()和Base64.getUrlDecoder() - 它会把
+替换为-,/替换为_,且默认不填充(也可调用withoutPadding()显式控制) - 适合 JWT token payload、RESTful 接口参数、短链接 ID 等场景
MIME Base64 编码(带换行)
主要用于电子邮件或符合 MIME 规范的数据传输,编码结果每 76 字符自动换行,末尾加 CRLF。
- 使用
Base64.getMimeEncoder()和Base64.getMimeDecoder() - 若不需要换行,可用
Base64.getMimeEncoder(76, new byte[]{})禁用换行符 - 日常 Web 开发中较少直接使用,除非对接邮件系统或老协议
大文件或流式处理建议
对图片、PDF 等较大二进制数据,避免一次性加载全部字节到内存。
- 用
Base64.getEncoder().wrap(OutputStream)包装输出流,边读边编码 - 同样可用
Base64.getDecoder().wrap(InputStream)实现流式解码 - 配合
Files.newInputStream()和Files.newOutputStream()可高效处理文件
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










