Kotlin/Java Base64编码和解码(图片、文件)

Stars-one 2021年03月11日 218次浏览 本篇字数为2,131字

本文为作者原创,转载请注明出处,谢谢配合
作者:Stars-one
链接:https://stars-one.site/2021/03/11/kotlin-base64


最近在项目中使用到了Base64编码和解码,便是稍微写篇文章记录一下

PS:本文代码都是使用Kotlin编写,使用的到Java原生的Base64类

Base64编码介绍

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据

什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这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)

参考