Java 8 中的 Base64 工具类
Java 8 引入了 Base64 工具类,提供了内置的编码器和解码器来进行 Base64 编码和解码。共有三种类型的 Base64 编码和解码可用,如下简要介绍:
基本(Basic)编码和解码
-
基本 - 输出映射到 A-Za-z0-9+/. 字符集。编码器不在输出中添加换行符,解码器拒绝除 A-Za-z0-9+/ 以外的任何字符。
-
URL 安全 - 输出映射到 A-Za-z0-9+_. 字符集。输出是 URL 和文件名安全的。
-
MIME 友好 - 输出映射到 MIME 友好的格式。输出由不超过 76 个字符的行组成,并使用回车符 '\r' 后跟换行符 '\n' 作为行分隔符。编码输出的末尾没有行分隔符。
基本 Base64 编码和解码
基本 Base64 编码器编码提供的字符串时不添加任何换行符。此编码器使用 A-Za-z0-9+/ 字符集。下面的代码片段展示了 Base64 编码器的用法。
String stringToEncode = "TutorialsPoint?java8";
String base64encodedString = Base64.getEncoder().encodeToString(stringToEncode.getBytes("utf-8"));
简单的 Base64 解码器通过拒绝除 A-Za-z0-9+/ 以外的任何字符来解码 Base64 编码的字符串。下面的代码片段解释了 Base64 解码器的使用。
byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
System.out.println("Original String: " + new String(base64decodedBytes, "utf-8"));
示例:基本 Base64 编码和解码在 Java 中的应用
下面的例子展示了如何使用通过 Base64.getEncoder()
获取的编码器来编码一个简单的字符串,然后使用通过 Base64.getDecoder()
方法获取的解码器来解码返回的编码字符串。
package com.tutorialspoint;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class Base64Tester {
public static void main(String[] args) throws UnsupportedEncodingException {
String stringToEncode = "TutorialsPoint?java";
String base64encodedString = Base64.getEncoder().encodeToString(stringToEncode.getBytes("utf-8"));
System.out.println("Encoded String: " + base64encodedString);
byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
System.out.println("Decoded String: " + new String(base64decodedBytes, "utf-8"));
}
}
输出:
Encoded String: VHV0b3JpYWxzUG9pbnQtamF2YQ==
Decoded String: TutorialsPoint?java
URL 安全的 Base64 编码和解码
URL 安全的 Base64 编码器将提供的 URL 编码为 URL 和文件名安全的形式。此编码器使用 A-Za-z0-9+/ 字符集。下面的代码片段展示了 URL Base64 编码器的用法。
String stringToEncode = "TutorialsPoint?java8";
String base64encodedString = Base64.getUrlEncoder().encodeToString(stringToEncode.getBytes("utf-8"));
URL 安全的 Base64 解码器通过拒绝除 A-Za-z0-9+/ 以外的任何字符来解码 Base64 编码的字符串。下面的代码片段解释了 Base64 解码器的使用。
byte[] base64decodedBytes = Base64.getUrlDecoder().decode(base64encodedString);
System.out.println("Original String: " + new String(base64decodedBytes, "utf-8"));
示例:URL 安全的 Base64 编码和解码在 Java 中的应用
下面的例子展示了如何使用通过 Base64.getUrlEncoder()
获取的编码器来编码一个简单的字符串,然后使用通过 Base64.getUrlDecoder()
方法获取的解码器来解码返回的编码字符串。
package com.tutorialspoint;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class Base64Tester {
public static void main(String[] args) throws UnsupportedEncodingException {
String stringToEncode = "TutorialsPoint?java";
String base64encodedString = Base64.getUrlEncoder().encodeToString(stringToEncode.getBytes("utf-8"));
System.out.println("Encoded String: " + base64encodedString);
byte[] base64decodedBytes = Base64.getUrlDecoder().decode(base64encodedString);
System.out.println("Decoded String: " + new String(base64decodedBytes, "utf-8"));
}
}
输出:
Encoded String: VHV0b3JpYWxzUG9pbnQtamF2YQ==
Decoded String: TutorialsPoint?java
MIME 类型内容的 Base64 编码和解码
MIME 友好的 Base64 编码器将提供的字符串内容编码为 MIME 友好的格式。输出由不超过 76 个字符的行组成,并使用回车符 '\r' 后跟换行符 '\n' 作为行分隔符。编码输出的末尾没有行分隔符。下面的代码片段展示了 MIME Base64 编码器的用法。
String stringToEncode = "TutorialsPoint?java8";
String base64encodedString = Base64.getMimeEncoder().encodeToString(stringToEncode.getBytes("utf-8"));
MIME 友好的 Base64 解码器通过拒绝除 A-Za-z0-9+/ 以外的任何字符来解码 Base64 编码的字符串。下面的代码片段解释了 Base64 解码器的使用。
byte[] base64decodedBytes = Base64.getMimeDecoder().decode(base64encodedString);
System.out.println("Original String: " + new String(base64decodedBytes, "utf-8"));
示例:MIME 友好的 Base64 编码和解码在 Java 中的应用
下面的例子展示了如何使用通过 Base64.getMimeEncoder()
获取的编码器来编码一个简单的字符串,然后使用通过 Base64.getMimeDecoder()
方法获取的解码器来解码返回的编码字符串。
package com.tutorialspoint;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.UUID;
public class Base64Tester {
public static void main(String[] args) throws UnsupportedEncodingException {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 10; ++i) {
stringBuilder.append(UUID.randomUUID().toString());
stringBuilder.append(",");
}
byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);
System.out.println("Base64 Encoded String (MIME) : " + mimeEncodedString);
byte[] base64decodedBytes = Base64.getMimeDecoder().decode(mimeEncodedString);
System.out.println("Decoded String: " + new String(base64decodedBytes, "utf-8"));
}
}
输出:
Base64 Encoded String (MIME) : NzRmNjkyODktYzJjZS00ZmU2LWEzYTUtMmFlMWRlMDQ1ZjU4LGQyNGQzMTU5LTVmOGUtNDZhMS04
NGRkLTBiMzNlNzc4ZjNiOCw2MmM1OTEzOS1kNmQwLTQ5MmQtYmUyMi01NmEzMTk5NmRkMTAsZDZh
NjBlNzctZjRjZi00Y2Q4LTk5MWEtYTY2ZDEzMzU4YjFjLGFlNDhkZmZjLTEwZjctNDk5OS05NTFj
LTU5ZGY1MjcyYjczNywxY2JiZjU0Ni0zNjc1LTQ4NzAtYTYxNC01MzkyODFkNjRjYms=...
Decoded String: 74f69289-c2ce-4fe6-a3a5-2ae1de045f58,d24d3159-5f8e-46a1-84dd-0b33e778f3b8,62c59139-d6d0-492d-be22-56a31996dd10,d6a60e77-f4cf-4cd8-991a-a66d13358b1c,ae48dffc-10f7-4999-951c-59df5272b737,1cbbf546-3675-4870-a614-539281d64cbc,19a53b81-8449-43c2-886c-48fe8fd6f7a5,426dad14-1262-4bad-a1be-3f8781a5c8b2,6610183e-70cd-43e7-94d4-0d83ff538d5f,9c16c03e-effe-4f86-adc8-67718ca5eb26,...
Base64 类提供了以下嵌套类来支持 Base64 编码和解码操作:
嵌套类及其描述
序号 |
嵌套类 |
描述 |
1 |
static class Base64.Decoder |
实现了解码器,用于根据 RFC 4648 和 RFC 2045 指定的 Base64 编码方案解码字节数据。 |
2 |
static class Base64.Encoder |
实现了编码器,用于根据 RFC 4648 和 RFC 2045 指定的 Base64 编码方案编码字节数据。 |
Base64 类的方法
Base64 类提供了以下方法来帮助执行 Base64 编码和解码:
方法及其描述
序号 |
方法名称 |
描述 |
1 |
static Base64.Decoder getDecoder() |
返回一个使用基本类型 Base64 编码方案的 Base64.Decoder。 |
2 |
static Base64.Encoder getEncoder() |
返回一个使用基本类型 Base64 编码方案的 Base64.Encoder。 |
3 |
static Base64.Decoder getMimeDecoder() |
返回一个使用 MIME 类型 Base64 解码方案的 Base64.Decoder。 |
4 |
static Base64.Encoder getMimeEncoder() |
返回一个使用 MIME 类型 Base64 编码方案的 Base64.Encoder。 |
5 |
static Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator) |
返回一个使用 MIME 类型 Base64 编码方案的 Base64.Encoder,并指定了行长度和行分隔符。 |
6 |
static Base64.Decoder getUrlDecoder() |
返回一个使用 URL 和文件名安全类型 Base64 编码方案的 Base64.Decoder。 |
7 |
static Base64.Encoder getUrlEncoder() |
返回一个使用 URL 和文件名安全类型 Base64 编码方案的 Base64.Encoder。 |
继承的方法
此类继承自以下类的方法: