Base64 编码解码在 Java 中的应用

简介

Base64 是一种用于将二进制数据编码成 ASCII 字符串的方法,常用于在网络传输或存储中传递二进制数据,例如图片、音频等。Base64 编码算法通过将 3 个字节的数据编码成 4 个可见字符的形式,相比原始数据,编码后的数据长度会增加约 33%。Java 内置了 Base64 编码解码的相关类,使得在 Java 中使用 Base64 变得非常简单。

Base64 编码

在 Java 中,Base64 编码可以通过 java.util.Base64 类来实现。以下是一个使用示例:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Example {

    public static void main(String[] args) {
        String originalMessage = "Hello, Base64!";
        
        // 编码
        String encodedMessage = Base64.getEncoder().encodeToString(originalMessage.getBytes(StandardCharsets.UTF_8));
        
        System.out.println("Base64 编码结果: " + encodedMessage);
    }
}

以上代码中,我们首先将原始的字符串数据 Hello, Base64! 转换为字节数组,然后使用 Base64.getEncoder().encodeToString() 方法将字节数组进行编码,最后将编码结果打印出来。运行结果如下:

Base64 编码结果: SGVsbG8sIEJhc2U2NCE=

可以看到,原始字符串被成功地编码成了 Base64 字符串。

Base64 解码

与编码相反,Java 中的 Base64 解码可以通过 java.util.Base64 类来实现。以下是一个使用示例:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Example {

    public static void main(String[] args) {
        String encodedMessage = "SGVsbG8sIEJhc2U2NCE=";
        
        // 解码
        byte[] decodedBytes = Base64.getDecoder().decode(encodedMessage);
        String decodedMessage = new String(decodedBytes, StandardCharsets.UTF_8);
        
        System.out.println("Base64 解码结果: " + decodedMessage);
    }
}

以上代码中,我们首先将编码后的 Base64 字符串 SGVsbG8sIEJhc2U2NCE= 转换为字节数组,然后使用 Base64.getDecoder().decode() 方法将字节数组进行解码,再将解码结果转换为字符串并打印出来。运行结果如下:

Base64 解码结果: Hello, Base64!

可以看到,Base64 字符串被成功地解码成了原始字符串。

Base64 URL 编码和解码

除了常规的 Base64 编码解码外,Java 中的 Base64 类还支持 Base64 URL 编码解码。在 URL 编码中,+ 字符会被替换为 -/ 字符会被替换为 _,同时尾部可能会包含 = 字符。以下是一个使用示例:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Example {

    public static void main(String[] args) {
        String originalMessage = "Hello, Base64!";
        
        // URL 编码
        String encodedUrlMessage = Base64.getUrlEncoder().encodeToString(originalMessage.getBytes(StandardCharsets.UTF_8));
        
        System.out.println("Base64 URL 编码结果: " + encodedUrlMessage);
        
        // URL 解码
        byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedUrlMessage);
        String decodedMessage = new String(decodedBytes, StandardCharsets.UTF_8);
        
        System.out.println("Base64 URL 解码结果: " + decodedMessage);
    }
}

以上代码中,我们使用 Base64.getUrlEncoder().encodeToString() 方法将原始字符串进行 URL 编码,使用 Base64.getUrlDecoder().decode() 方法将 URL 编码后的字符串进行解码。运行结果如下:

Base64 URL 编码结果: SGVsbG8sIEJhc2U2NCE
Base64 URL 解码结果: Hello, Base64!

可以看到,URL 编码和解码也能够正常工作。

总结

在 Java 中,通过内置的 java.util.Base64 类,我们可以轻松地进行 Base64 编码解码操作。无论是常规的 Base64 编码解码,还是 URL