杰瑞科技汇

Java中Base64如何转为byte数组?

使用 Java 8+ 内置的 java.util.Base64 (推荐)

这是目前最标准、最推荐的方法,无需引入任何外部库。

Java中Base64如何转为byte数组?-图1
(图片来源网络,侵删)

java.util.Base64 类提供了 getDecoder() 方法来获取一个 Base64.Decoder 实例,然后调用它的 decode() 方法即可。

标准解码

这是最常见的用法,适用于标准的 Base64 编码。

代码示例:

import java.util.Base64;
public class Base64ToByteExample {
    public static void main(String[] args) {
        // 1. 准备一个 Base64 编码的字符串
        // 字符串 "Hello, World!" 的 Base64 编码结果
        String base64String = "SGVsbG8sIFdvcmxkIQ==";
        try {
            // 2. 获取 Base64.Decoder 实例
            Base64.Decoder decoder = Base64.getDecoder();
            // 3. 调用 decode() 方法进行解码
            byte[] decodedBytes = decoder.decode(base64String);
            // 4. 打印结果
            System.out.println("原始 Base64 字符串: " + base64String);
            System.out.println("解码后的 byte[] 数组长度: " + decodedBytes.length);
            // 将 byte[] 数组转换回字符串以验证结果
            String originalString = new String(decodedBytes);
            System.out.println("解码后恢复的字符串: " + originalString);
        } catch (IllegalArgumentException e) {
            System.err.println("错误:输入的字符串不是有效的 Base64 格式!");
            e.printStackTrace();
        }
    }
}

输出:

Java中Base64如何转为byte数组?-图2
(图片来源网络,侵删)
原始 Base64 字符串: SGVsbG8sIFdvcmxkIQ==
解码后的 byte[] 数组长度: 13
解码后恢复的字符串: Hello, World!

URL 安全解码

Base64 编码中可能包含 和 这两个字符,它们在 URL 中有特殊含义,可能会导致问题,URL 安全的 Base64 编码会用 和 _ 替换这两个字符。

Java 的 Base64 类也提供了专门的解码器来处理这种情况。

代码示例:

import java.util.Base64;
public class Base64UrlToByteExample {
    public static void main(String[] args) {
        // URL 安全的 Base64 编码字符串
        // 字符串 "Hello, World!" 的 URL 安全 Base64 编码结果
        String base64UrlString = "SGVsbG8sIFdvcmxkIQ";
        try {
            // 获取 URL 安全的 Base64.Decoder 实例
            Base64.Decoder decoder = Base64.getUrlDecoder();
            // 进行解码
            byte[] decodedBytes = decoder.decode(base64UrlString);
            // 打印结果
            System.out.println("原始 URL 安全 Base64 字符串: " + base64UrlString);
            String originalString = new String(decodedBytes);
            System.out.println("解码后恢复的字符串: " + originalString);
        } catch (IllegalArgumentException e) {
            System.err.println("错误:输入的字符串不是有效的 URL 安全 Base64 格式!");
            e.printStackTrace();
        }
    }
}

输出:

Java中Base64如何转为byte数组?-图3
(图片来源网络,侵删)
原始 URL 安全 Base64 字符串: SGVsbG8sIFdvcmxkIQ
解码后恢复的字符串: Hello, World!

使用 Apache Commons Codec 库

如果你的项目已经使用了 Apache Commons 库,或者你习惯使用它,org.apache.commons.codec.binary.Base64 也是一个非常好的选择。

你需要添加依赖。

Maven 依赖

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version> <!-- 请使用最新版本 -->
</dependency>

Gradle 依赖

implementation 'commons-codec:commons-codec:1.15' // 请使用最新版本

代码示例

import org.apache.commons.codec.binary.Base64;
public class CommonsCodecExample {
    public static void main(String[] args) {
        // 1. 准备一个 Base64 编码的字符串
        String base64String = "SGVsbG8sIFdvcmxkIQ==";
        try {
            // 2. 直接调用 Base64.decodeBase64() 方法进行解码
            // 这个方法内部会处理解码器实例的创建
            byte[] decodedBytes = Base64.decodeBase64(base64String);
            // 3. 打印结果
            System.out.println("原始 Base64 字符串: " + base64String);
            System.out.println("解码后的 byte[] 数组长度: " + decodedBytes.length);
            String originalString = new String(decodedBytes);
            System.out.println("解码后恢复的字符串: " + originalString);
        } catch (Exception e) {
            System.err.println("错误:解码失败!");
            e.printStackTrace();
        }
    }
}

输出结果与 Java 8 的标准解码示例完全相同。


总结与对比

特性 Java 8+ java.util.Base64 Apache Commons Codec org.apache.commons.codec.binary.Base64
依赖 无需任何外部依赖,JDK 自带 需要添加 commons-codec 库依赖
易用性 需要先获取 Decoder 实例,再调用 decode() 更简洁,可以直接调用静态方法 Base64.decodeBase64()
功能 提供标准、URL安全、MIME友好的多种编解码器 功能非常全面,除了标准Base64,还支持Base32、Base16等
推荐度 强烈推荐,对于新项目,这是首选。 如果项目已使用该库,或者需要更复杂的编解码功能,是很好的选择。

对于绝大多数 Java 开发场景,优先使用 Java 8 内置的 java.util.Base64,它更轻量,是标准 API,无需管理额外的依赖,只有在特殊需求或已有项目规范下,才考虑使用 Apache Commons Codec。

分享:
扫描分享到社交APP
上一篇
下一篇