当前位置:Java -> 如何在Java中使用API对内容进行Base64编码或解码

如何在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 分别提供以下功能:

  1. 检测文本字符串是否为 Base64 编码
  2. Base64 解码内容(将 Base64 字符串转换为二进制内容)
  3. Base64 编码内容(将二进制或文件数据转换为 Base64 文本字符串)

存在一些不同的 文本编码选项,因此我们可以使用第一个 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编码或解码