java Base64 是什么

Java Base64 是 Java 中用于 Base64 编码/解码 的工具类,它将二进制数据转换为可打印的 ASCII 字符集(A-Z, a-z, 0-9, +, / 和填充符 =),主要用于在文本协议(如 HTTP、XML、JSON)中安全传输二进制数据。

主要特点

  • 二进制 ↔ 文本转换:将任意二进制数据(图片、文件、加密数据等)转换为文本字符串
  • URL安全:某些变体避免使用 URL 不安全的字符(如 + 和 /)
  • MIME兼容:支持邮件传输格式

Java 中的实现方式

1. Java 8+ 标准 API(推荐)

java 复制代码
import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String original = "Hello, World!";
        
        // 基本编码器
        Base64.Encoder encoder = Base64.getEncoder();
        String encoded = encoder.encodeToString(original.getBytes());
        System.out.println("Encoded: " + encoded); // SGVsbG8sIFdvcmxkIQ==
        
        // 解码
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decoded = decoder.decode(encoded);
        System.out.println("Decoded: " + new String(decoded));
    }
}

2. 三种编码器类型

java 复制代码
// 1. 基本编码器(标准 Base64)
Base64.Encoder basicEncoder = Base64.getEncoder();

// 2. URL编码器(用 -_ 代替 +/,避免URL冲突)
Base64.Encoder urlEncoder = Base64.getUrlEncoder();
String urlSafe = urlEncoder.encodeToString(data);

// 3. MIME编码器(每76字符换行,邮件格式)
Base64.Encoder mimeEncoder = Base64.getMimeEncoder();

3. Java 8 之前的方式

java 复制代码
// 使用 Apache Commons Codec(需要添加依赖)
import org.apache.commons.codec.binary.Base64;
byte[] encoded = Base64.encodeBase64("text".getBytes());

// 或使用 sun.misc.BASE64Encoder(不推荐,已废弃)

常见用途

1. 传输二进制数据

java 复制代码
// 图片转 Base64
byte[] imageBytes = Files.readAllBytes(Paths.get("image.jpg"));
String base64Image = Base64.getEncoder().encodeToString(imageBytes);

2. URL参数安全传输

java 复制代码
// URL安全编码
String data = "敏感数据#123";
String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(data.getBytes());
// 结果不含 = + / 等特殊字符

3. 基本认证

java 复制代码
// HTTP Basic Auth
String auth = "username:password";
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
// 请求头:Authorization: Basic encodedAuth

4. 数据存储

java 复制代码
// 小型数据存储(不建议大型文件)
String serializedData = Base64.getEncoder().encodeToString(objectBytes);

注意事项

  1. 体积增加:Base64 编码后数据体积增加约 33%
  2. 非加密:Base64 只是编码,不是加密,敏感数据需要额外加密
  3. 性能:编解码有性能开销,大文件需谨慎使用
  4. 换行符:某些系统要求每 76 字符换行(MIME 格式)

实用工具方法

java 复制代码
public class Base64Utils {
    
    // 编码字符串
    public static String encode(String str) {
        return Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8));
    }
    
    // 解码字符串
    public static String decode(String base64Str) {
        byte[] decoded = Base64.getDecoder().decode(base64Str);
        return new String(decoded, StandardCharsets.UTF_8);
    }
    
    // URL安全编码(无填充)
    public static String encodeUrlSafe(String str) {
        return Base64.getUrlEncoder().withoutPadding()
            .encodeToString(str.getBytes(StandardCharsets.UTF_8));
    }
}

最佳实践

  • 优先使用 Java 8+ 的 java.util.Base64
  • URL 参数使用 getUrlEncoder()
  • 传输大文件考虑分块或直接二进制传输
  • 始终指定字符集(如 UTF-8)避免编码问题
相关推荐
IT 行者2 分钟前
GitHub Spec Kit 实战(五):/speckit.tasks 怎么拆——Spec Kit 五部曲收官
java·ai编程·claude
(Charon)13 分钟前
【C++ 面试高频基础:指针、引用、const、static、new/delete 总结】
java·开发语言
Yeats_Liao31 分钟前
Feed流系统设计(三):数据模型与存储设计,从表结构到Redis收件箱
java·javascript·redis
JiaHao汤37 分钟前
分布式事务方案全景:从理论到 Seata 落地
java·分布式·spring·spring cloud
色空大师1 小时前
【debug调试详解-idea】
java·ide·intellij-idea·调试·远程调试
程序猿阿越1 小时前
AutoMQ源码(一)读、写、Compaction
java·后端·源码
ywl4708120872 小时前
jwt生产token,简单版helloworld
java·数据库·spring
未若君雅裁2 小时前
生产问题排查与性能瓶颈定位:日志、监控、链路追踪、压测与Arthas
java·web安全
器灵科技2 小时前
AI视频工具实测:Seedance/可灵/HappyHorse谁最能打?
java·运维·数据库·人工智能·github
南部余额2 小时前
RabbitMQ 进阶:延迟队列完全指南
java·分布式·spring·rabbitmq