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)
}

这里提及一下: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)
参考
Kotlin/Java Base64编码和解码(图片、文件)的更多相关文章
- Java利用Base64编码和解码图片文件
1.编码与解码代码如下所示: import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import jav ...
- android Java BASE64编码和解码二:图片的编码和解码
1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...
- 【java】java base64编码与解码
参考地址:http://blog.csdn.net/zhou_kapenter/article/details/62890262 要求:JDK1.8+ 使用java原生工具类即可实现 [这里展示字符串 ...
- python base64编码和解码图片
简介 在实际项目中,可能需要对图片进行大小的压缩,较为常见的方法则是将图片转换为base64的编码,本文就python编码和解码图片做出一定的介绍. 代码 import base64 import o ...
- android Java BASE64编码和解码一:基础
今天在做Android项目的时候遇到一个问题,需求是向服务器上传一张图片,要求把图片转化成图片流放在 json字符串里传输. 类似这样的: {"name":"jike&q ...
- java base64编码、解码的三种方式
java base64编码.解码 CreationTime--2018年7月24日10点38分 Author:Marydon 1.方式一:DatatypeConverter 说明:使用jdk自带的 ...
- Java对网络图片/本地图片转换成Base64编码和解码
一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...
- Java 8中的Base64编码和解码
转自:https://juejin.im/post/5c99b2976fb9a070e76376cc Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引 ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
随机推荐
- 4.Redis客户端的使用
标题 : 4.Redis客户端的使用 目录 : Redis 序号 : 4 Console.WriteLine($"北京和天津之间的距离是:{distance}公里"); #### ...
- 信号量解决写者优先&读者优先&公平竞争(reader writer)
先说问题: 这里的rand都是伪随机.解决也很简单,srand即可.内容懒得改了~~ 描述及思路: 代码: 运行结果: 读者优先: 效果 ...
- Leetcode(104)-二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,null,15,7], ...
- C++中关于输入cin的一些总结
(1)cin 在理解cin功能时,不得不提标准输入缓冲区.当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符 ...
- 翻译:《实用的Python编程》01_03_Numbers
目录 | 上一节 (1.2 第一个程序) | 下一节 (1.4 字符串) 1.3 数字 本节讨论数学计算. 数字类型 Python 有 4 种类型的数字: 布尔型 整型 浮点型 复数(虚数) 布尔型( ...
- [转]论基于DSSA的软件架构设计与应用
[摘要] 去年三月份,我所在的公司启动国网电力用户用电信息采集系统项目,我被任命为项目负责人.国网电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分.由于公司之前为南网(主要是广东省) ...
- SEO All In One
SEO All In One website SEO https://www.google.com/search?newwindow=1&safe=active&sxsrf=ALeKk ...
- 找出 int 数组的平衡点 & 二叉树 / 平衡二叉树 / 满二叉树 / 完全二叉树 / 二叉查找树
找出 int 数组的平衡点 左右两边和相等, 若存在返回平衡点的值(可能由多个); 若不存在返回 -1; ``java int [] arr = {2,3,4,2,4}; ```js const ar ...
- tree ignore & bash & cmd
tree ignore & bash & cmd tree ignore https://unix.stackexchange.com/a/47806 https://zaiste.n ...
- 召回 & 召回算法
召回 & 召回算法 recall https://developers.google.com/machine-learning/crash-course/classification/prec ...