Kotlin/Java Base64編碼和解碼(圖片、文件)


原文: 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)
}

轉化后的base64編碼字符串

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

需要添加前綴

圖片設置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)

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM