如何將 InputStream 轉換為 Base64 字符串
一、概述
Base64 是一種文本編碼方案,可為應用程序和平台之間的二進制數據提供可移植性。 Base64 可用於將二進制數據存儲在數據庫字符串列中,從而避免混亂的文件操作。當與數據 URI 方案結合使用時,Base64 可用於在網頁和電子郵件中嵌入圖像,符合 HTML 和多用途 Internet 郵件擴展 (MIME) 標準。
在這個簡短的教程中,我們將演示 Java Streaming IO 函數和內置 Java Base64
類,以將二進制數據作為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
,然後將流逐字節讀取到數組中。
我們使用 Apache commons-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 字符串以及將該字符串成功解碼回二進制數組。
與往常一樣,本文中提供的代碼可在 GitHub 上獲得。