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

如何将InputStream转换为Base64字符串

白鹭 - 2022-07-12 2295 0 2

一、概述

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

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

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/resourceslogo.png

3. 将转换为 Base64 字符串InputStream

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

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

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

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

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。 结论

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


标签:

0 评论

发表评论

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