原文: Kotlin/Java Base64編碼和解碼(圖片、文件) | Stars-One的雜貨小窩
最近在項目中使用到了Base64編碼和解碼,便是稍微寫篇文章記錄一下
PS:本文代碼都是使用Kotlin編寫,使用的到Java原生的Base64類
Base64編碼介紹
Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。
Base64一般用於在HTTP協議下傳輸二進制數據,由於HTTP協議是文本協議,所以在HTTP協議下傳輸二進制數據需要將二進制數據轉換為字符數據
什么是可打印字符?在ASCII碼中規定,031、127這33個字符屬於控制字符,32126這95個字符屬於可打印字符,
總結: base64編碼是將二進制數據轉為字符串數據,從而方便網絡傳輸
代碼實現
編碼
由於文本過多,打印出來會不好看,所以便是輸出到txt文件里
注:下面的方法是基於JDK8環境,Base64是Java.util工具包里
fun main() {
val file = File("D:\\file_defalut\\Pictures\\download.png")
val str = Base64.getEncoder().encodeToString(file.readBytes())
val txtFile = File("D:\\file_defalut\\Pictures\\test.txt")
txtFile.writeText(str)
}

這里提及一下:Html文件中,可以使用圖片Base64字符串進行設置圖片(使用src屬性),但是要帶有前綴data:image/png;base64,,如下圖所示


除此之外,還可以使用base64來顯示pdf
<!--basedatapdf為base64編碼-->
<iframe :src="'data:application/pdf;base64,'+basedatapdf" width="100%" height="100%">
</iframe>
當然,上文代碼里只有個圖片的示例,文件其實也是一樣,如果你想將字符串進行base64編碼也是可以的,只需要將字符串轉為二進制數據(byte數組)
Kotlin中提供了toByteArray,可以快速將String字符串轉為ByteArray(在Java中為byte[]),這個ByteArray即二進制數據
解碼
val txtFile = File("D:\\file_defalut\\Pictures\\test.txt")
val str = Base64.getDecoder().decode(txtFile.readText())
解碼就比較容易了,這里就不多介紹了
補充
base64進行加密解密
各位使用的時候可能會注意到,encode和decode方法里面的參數都可以傳byte數組
base64除了上述用來做網絡傳輸二進制的功能,還可以用來加密和解密
這也很好理解,String類型的數據本質也是二進制數據(byte數組),我們將二進制轉為String,無非是ByteArray -> ByteArray ->String這樣的步驟
Android中Base64編碼
在Android也可以使用上述的方法,不過Android Studio會提示需要加個版本控制,因為上述的Base64這個類是JDK8才提供
但Android里的自帶有Base64,所以推薦使用自帶的Base64進行編碼和解碼
//編碼和解碼都使用Base64.DEFAULT
val str = Base64.encodeToString(byteArray,Base64.DEFAULT)
val byteArray = Base64.decode(str,Base64.DEFAULT)
