当前位置:Java -> 如何在Java中使用API对内容进行Base64编码或解码
Base64 编码 最早是在 30 多年前提出的(在 1992 年命名)。当时,简单邮件传输协议(SMTP)让开发人员不得不想办法在 ASCII 字符 中对电子邮件附件进行编码,以避免 SMTP 服务器对其产生干扰。
这些年来,Base64 编码仍然广泛用于相同的目的:在只接受 ASCII 字符的系统中替换二进制数据。电子邮件文件附件仍然是我们使用 Base64 编码的最常见示例,但这并不是唯一的用例。无论是将图像或其他文档嵌入 HTML、CSS 或 JavaScript 中,还是将它们包含在 JSON 对象中(例如,作为特定 API 端点的有效负载),Base64 都提供了一种便捷、易于访问的解决方案,从而能够应对接收系统对二进制数据说“不”的情况。
Base64 编码过程是从一个二进制编码的文件开始 —— 或者说是对文件内容进行 二进制编码 如果它目前还不是二进制。随后,二进制内容会被分成 6 位一组,并用一个 ASCII 字符来表示每个组。这个编码过程中一共有 64 个 ASCII 字符可用 —— 这也是 Base64 名称的由来 —— 这些字符包括 A-Z(大写)、a-z(小写)、0–9、加号和斜杠。这个过程的结果是一个字符串;例如,短语 “hello world” 最终看起来会像是 “aGVsbG8gd29ybGQ=”。末尾的“=”符号用作填充,以确保编码数据的长度是 4 的倍数。
当今在内容极为丰富的数字世界中,Base64 编码唯一重要的挑战是它对文件大小的影响。当我们对内容进行 Base64 编码时,我们会得到比原始内容多约 1 个额外字节信息的结果,将原始文件大小增加约 33%。以此为例,这意味着一个 800kb 的图像文件进行编码后会瞬间跳至 1mb 以上,消耗了更多昂贵的资源,同时在进行 Base64 编码内容的规模共享时创造了越来越笨拙的情况。
当我们的工作需要进行 Base64 内容转换时,我们有几种选择。首先,许多现代编程语言现在都具有内置类,专门设计用于在本地处理 Base64 编码和解码。例如,自从 2014 年首次发布 Java 8 以来,我们就可以使用 java.util.Base64 来处理与 Base64 之间的转换,并且几乎不需要费力。在 Python 和 C# 等语言中也存在类似的选项。
然而,根据我们项目的需要,我们可能会因为使用低代码 API 解决方案而受益匪浅,用于进行必要的 Base64 编码和解码。这可以帮助我们省去一些繁琐的编码工作,减轻服务器的一部分处理负担,并在某些情况下提供更一致的结果。在本文的其余部分,我将演示一些免费的 API,我们可以利用这些 API 来简化我们进行 1) 识别内容是否是 Base64 编码,以及 2) 对 Base64 内容进行编码或解码的工作流。
使用本页面下方提供的即时运行的 Java 代码示例,我们可以利用三个单独的免费 API,用于构建我们的 Base64 检测和转换工作流。这三个 API 分别提供以下功能:
存在一些不同的 文本编码选项,因此我们可以使用第一个 API 作为一种一致的方法,来识别(或验证)在我们身边出现的 Base64 编码。一旦确认我们正在处理 Base64 内容,我们就可以使用第二个 API 将该内容解码为二进制。当我们需要为电子邮件附件或需要 ASCII 字符的相关系统打包我们自己的内容时,我们可以使用第三个 API 直接将二进制 OR 文件数据内容转换为 Base64。值得提醒的是,如果我们使用了一个文件数据字符串,API 会首先将该内容进行二进制编码,然后再进行 Base64 编码,因此我们不必担心这一部分。
为了授权我们的 API 调用,我们需要一个免费版 API 密钥,它将允许我们每月发出 800 次 API 调用(没有额外的承诺 —— 我们的总数在下个月即将到来时会自动重置)。
在调用以上任何一个 API 的函数之前,我们的第一步是安装 SDK。
在我们的 Maven POM 文件中,让我们添加对仓库的引用(Jitpack 用于动态编译库):
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
接着,让我们添加依赖的引用:
<dependencies>
<dependency>
<groupId>com.github.Cloudmersive</groupId>
<artifactId>Cloudmersive.APIClient.Java</artifactId>
<version>v4.25</version>
</dependency>
</dependencies>
现在,我们可以实现即时运行的代码来调用每个独立的 API。
让我们从 base64 检测 API 开始。我们可以使用以下代码来组织我们的 API 调用:
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditTextApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");
EditTextApi apiInstance = new EditTextApi();
Base64DetectRequest request = new Base64DetectRequest(); // Base64DetectRequest | Input request
try {
Base64DetectResponse result = apiInstance.editTextBase64Detect(request);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling EditTextApi#editTextBase64Detect");
e.printStackTrace();
}
接着,让我们进行 base64 解码 API。我们可以使用以下代码来组织我们的 API 调用:
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditTextApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");
EditTextApi apiInstance = new EditTextApi();
Base64DecodeRequest request = new Base64DecodeRequest(); // Base64DecodeRequest | Input request
try {
Base64DecodeResponse result = apiInstance.editTextBase64Decode(request);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling EditTextApi#editTextBase64Decode");
e.printStackTrace();
}
最后,让我们实现我们的 base64 编码选项(提醒一下,我们可以将二进制或文件数据内容用于这个选项)。我们可以使用以下代码来组织我们的 API 调用:
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditTextApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");
EditTextApi apiInstance = new EditTextApi();
Base64EncodeRequest request = new Base64EncodeRequest(); // Base64EncodeRequest | Input request
try {
Base64EncodeResponse result = apiInstance.editTextBase64Encode(request);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling EditTextApi#editTextBase64Encode");
e.printStackTrace();
}
现在,我们在我们的 Java 应用程序中有了一些额外的选项来识别、解码和/或编码 base64 内容。
推荐阅读: 比亚迪入职经历分享
本文链接: 如何在Java中使用API对内容进行Base64编码或解码