zoukankan      html  css  js  c++  java
  • 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)
    

    参考


    提问之前,请先看提问须知 点击右侧图标发起提问 联系我 或者加入QQ群一起学习 Stars-One安卓学习交流群 TornadoFx学习交流群:1071184701
  • 相关阅读:
    Leetcode: 二分搜索法
    ALM 中查看某个 test 的更改 history 历史
    Python: map() and reduce()
    如何查询注册表的值及 Powershell 应用
    使用 Windows PowerShell 实现 Web UI 自动化 (转)
    zhuan: WAN simulating tool
    Robot Framework 1
    Enable Coded UI Testing of Your Controls
    NetBeans GUI tests on Jenkins + Windows (转)
    (转)JDK 1.8 预览版Lambda语法分析
  • 原文地址:https://www.cnblogs.com/stars-one/p/14520950.html
Copyright © 2011-2022 走看看