拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何将InputStream 转换为Base64 字符串

如何将InputStream 转换为Base64 字符串

白鹭 - 2022-07-04 2157 0 2

一、概述

Base64 是一种文本编码方案,可为应用程序和平台之间的二进制数据提供可移植性。Base64 可用于将二进制数据存储在数据库字符串列中,从而避免混乱的文件操作。当与数据URI 方案结合使用时,Base64 可用于在网页和电子邮件中嵌入图像,符合HTML 和多用途Internet 邮件扩展(MIME) 标准。

在这个简短的教程中,我们将演示Java Streaming IO 函数和内置JavaBase64类,以将二进制数据作为InputStream加载,然后将其转换为String

2. 设置

让我们看看代码所需的依赖项和测试数据。

2.1。依赖项

我们将使用Apache IOUtils库通过将其依赖项添加到我们的pom.xml来方便地访问测试数据文件:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>

2.2.测试数据

这里需要一个二进制测试数据文件。所以我们将在我们的标准src/test/resources文件夹中添加一个logo.png图像文件。

3. 将InputStream转换为Base64 字符串

Java 在java.util.Base64类中内置了对Base64 编码和解码的支持。所以我们将从那里使用static方法来完成繁重的工作。

Base64.encode()方法需要一个byte数组,我们的图像在一个文件中。因此,我们需要先将文件转换为InputStream,然后将流逐字节读取到数组中。

我们使用Apachecommons-io包中的IOUtils.toByteArray()方法作为替代冗长的纯Java 方法的便捷替代方法。

首先,我们将编写一个简单的方法来生成“穷人”校验和:

int calculateChecksum(byte[] bytes) {
int checksum = 0;
for (int index = 0; index < bytes.length; index++) {
checksum += bytes[index];
}
return checksum;
}

我们将使用它来比较两个数组,验证它们是否匹配。

下一行打开文件,将其转换为字节数组,然后Base64 将其编码为String

InputStream sourceStream = getClass().getClassLoader().getResourceAsStream("logo.png");
byte[] sourceBytes = IOUtils.toByteArray(sourceStream);
String encodedString = Base64.getEncoder().encodeToString(sourceBytes);
assertNotNull(encodedString);

字符串看起来像一个随机字符块。事实上,它不是随机的,正如我们在验证步骤中看到的那样:

byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
assertNotNull(decodedBytes);
assertTrue(decodedBytes.length == sourceBytes.length);
assertTrue(calculateChecksum(decodedBytes) == calculateChecksum(sourceBytes));

4。结论

在本文中,我们演示了将InputStream编码为Base64 字符串以及将该字符串成功解码回二进制数组。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *