原文: 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编码和解码(图片、文件)的更多相关文章

  1. Java利用Base64编码和解码图片文件

    1.编码与解码代码如下所示: import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import jav ...

  2. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  3. 【java】java base64编码与解码

    参考地址:http://blog.csdn.net/zhou_kapenter/article/details/62890262 要求:JDK1.8+ 使用java原生工具类即可实现 [这里展示字符串 ...

  4. python base64编码和解码图片

    简介 在实际项目中,可能需要对图片进行大小的压缩,较为常见的方法则是将图片转换为base64的编码,本文就python编码和解码图片做出一定的介绍. 代码 import base64 import o ...

  5. android Java BASE64编码和解码一:基础

    今天在做Android项目的时候遇到一个问题,需求是向服务器上传一张图片,要求把图片转化成图片流放在 json字符串里传输. 类似这样的: {"name":"jike&q ...

  6. java base64编码、解码的三种方式

      java base64编码.解码 CreationTime--2018年7月24日10点38分 Author:Marydon 1.方式一:DatatypeConverter 说明:使用jdk自带的 ...

  7. Java对网络图片/本地图片转换成Base64编码和解码

    一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...

  8. Java 8中的Base64编码和解码

    转自:https://juejin.im/post/5c99b2976fb9a070e76376cc Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引 ...

  9. 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有相关 ...

随机推荐

  1. OpenStack Train版-1.安装基础环境&服务

    1. 服务组件的密码 密码名称 描述 ADMIN_PASS admin用户密码 CINDER_DBPASS 块设备存储服务的数据库密码 CINDER_PASS 块设备存储服务的 cinder 密码 D ...

  2. c++大整数

    这里不是必须用c++的话不推荐用c++大整数,py和java的支持要好得多. 大整数类  (非负) #include <iostream> #include <vector> ...

  3. C++的继承权限

    原文来自于:https://www.cnblogs.com/2018shawn/p/10648408.html 公式: 继承成员对外的访问属性 = Max{继承方式,父类成员访问级别}: ps;以下成 ...

  4. 后Low Code时代:聚焦和突破

    很多人都不想被贴上标签,我曾经也一样.觉得青春不能被定义,人也不能被分类.但随着学习和工作的变迁,慢慢开始发现标签也是一种名片效应. 比如一个做汽车销售的朋友,他就对BMW的车型非常熟悉,可以说是懂车 ...

  5. git alias all in one

    git alias all in one workspace:工作区 staging area:暂存区/缓存区 local repository:或本地仓库 remote repository:远程仓 ...

  6. ES6 & import * & import default & import JSON

    ES6 & import * & import default & import JSON import json & default value bug api.js ...

  7. Angular 2020

    Angular 2020 https://angular.io/start https://angular.io/guide/browser-support "@angular/core&q ...

  8. 移动端 750px UI 设计稿

    750px UI 设计稿 App 小程序 H5 rem & vh/vw 在移动端页面开发中,UI 一般会用750px(iphone 6)来出设计稿; 然后要求能够做到页面是自适应屏幕的,这种情 ...

  9. 可视化埋点 & XPath

    可视化埋点 & XPath https://www.w3.org/TR/xpath-full-text-30/ 数据的准确性 采集时机 数据发送策略 full XPath demo XML & ...

  10. USDN代币的特点

    USDN是NGK公链发行的算法型稳定币,采用智能合约发行,通过智能合约的透明化,能够让市场USND持有者获得算法稳定的背书.USDN是一种锚定全球通用的代币,更是连接全球数字经济的通用数字代币.USD ...