首页 > 其他分享 >base64编码的介绍和使用

base64编码的介绍和使用

时间:2022-10-22 16:16:11浏览次数:51  
标签:编码 字节 解码 base64 介绍 数组 String

一、base64是什么

base64是一种编码方式,可以基于64个可打印字符来表示二进制数据 ,也就是可以把二进制数据转换成字符串形式来表示,Base64编码是从二进制到字符的过程 。

在计算机中所有类型的数据最终都会以二进制的形式来表示,而base64可以把二进制数据转换成字符串。

二、java中base64编码的使用

在java中,不管是一个文件,一张图片,利用流读取到内存中后都会以字节数组的形式来表示,字符串也可以转换成字节数组

java中提供了一个 java.util.Base64 工具类可以用来进行base64的编码和解码

要明确的是,base64是对字节进行操作,所以操作后的结果还是一个字节,只不过这时变成了可打印字符

2.1对字符串进行base64编码和解码

编码:

public static void main(String[] args) {
        String str="Hello world";
        Base64.Encoder encoder = Base64.getEncoder();
        //将字符串转成字节数组进行base64编码得到一个新的字节数组,这个数组可以转成可打印字符
        byte[] encodeByteArr = encoder.encode(str.getBytes(StandardCharsets.UTF_8));
        //把新得到的字节数组再转成字符串形式(可打印字符),这样就得到了原始字符串的base64编码形式
        String encodeStr= new String(encodeByteArr,StandardCharsets.UTF_8);
        System.out.println(encodeStr);
    }

上边最终输出的结果是SGVsbG8gd29ybGQ=,这就是str进行base64编码后的字符串表示形式

解码:

public static void main(String[] args) {
        String decodeStr="SGVsbG8gd29ybGQ=";
        Base64.Decoder decoder = Base64.getDecoder();
        // 解码也是针对字节数组来解码的,解码后仍是一个字节数组,这个字节数组就不一定是可打印字符了
        byte[] decodeBytes = decoder.decode(decodeStr.getBytes(StandardCharsets.UTF_8));
        String res = new String(decodeBytes,StandardCharsets.UTF_8);
        System.out.println(res);
    }

最终输出的结果是 Hello world

这样就完成了编码和解码,要注意的是编码针对的是字节数组,解码后得到的也是一个字节数组,而转成字符串只是为了方便表示。

2.2 对图片进行base54编码和解码

为了方便的操作文件,这里使用了common-io中的IOUtils工具类来进行文件操作

		<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>

编码

public static void main(String[] args) throws IOException {
        //读取图片文件到内存中,得到字节数组
        FileInputStream input = new FileInputStream("d:/666.png");
        // 使用commons-io工具包的IOUtils工具类来读取文件
        byte[] imgBytes = IOUtils.toByteArray(input);
        //使用base64对字节数组编码,得到编码后的字节数组
        byte[] encodeByte = Base64.getEncoder().encode(imgBytes);
        //把编码后的字节数组转成字符串输出
        String str=new String(encodeByte,StandardCharsets.UTF_8);
        System.out.println(str);
    }

最终会输出一个由可打印字符组成的长字符串,这个字符串就是上边图片对应的base64编码

解码

public static void main(String[] args) throws IOException {
        //把上边生成的编码存到文件中,再从文件中读取,因为字符串太长了
        FileInputStream input = new FileInputStream("d:/图片编码.txt");
        byte[] bytes = IOUtils.toByteArray(input);
        // 用base64解码得到解码后的字节数组
        byte[] decodeBytes = Base64.getDecoder().decode(bytes);
        //把新字节数组输出到文件中
        IOUtils.write(decodeBytes,new FileOutputStream("d:/新图片.png"));
    }

上边就实现了对图片的编码和解码。对于其他类型的文件处理方法是一样的,都是先获取到字节数组,然后对字节数组编码得到新的字节数组,再把字节数组输出就可以得到文件。

标签:编码,字节,解码,base64,介绍,数组,String
From: https://www.cnblogs.com/chengxuxiaoyuan/p/16816272.html

相关文章

  • 前端base64编码格式图片转换为file类型并上传
    将前端的base64编码格式图片转换为file文件,方便传输到后台进行处理。/*将base64转换为blob*/functionbase64ToBlob(dataurl){vararr=dataurl.split(',');var......
  • xml 解析技术介绍和解析xml文件
     xml解析技术介绍xml可扩展的标记语言。不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。document对象表示的是整个文档(......
  • 【kubernetes入门到精通】Kubernetes架构分析介绍篇「入门篇」
    意志的出现不是对愿望的否定,而是把愿望合并和提升到一个更高的意识水平上。——罗洛·梅官方网站​​Kubernetes中文官方网站​​​​Kubernetes英文官方网站​​Kubernetes......
  • PostgreSQL两种临时表介绍
    PostgreSQL两种临时表:一种基于会话级的临时表;一种是事务级的临时表。PG的版本及当前user:postgres=#selectversion();                        ......
  • 数据库连接池_实现介绍和数据库连接池_c3p0基本使用
    数据库连接池_实现介绍:1.实现∶   1.标准接口:Datasource  javax.sql包下的1.方法∶获取连接:getconnection()归还连接:connection.close()。如果连接对象C......
  • Java--->集合中常用的ArrayList的使用和介绍
    前段时间一直在说数组,今天说下Java集合中常用的ArrayListArrayList类是一个可以动态修改的数组,与普通数组的区别就是ArrayList没有固定大小的限制,可以添加或删除元素。Array......
  • 数据库连接池概述和实现介绍
    数据库连接池-概述概念:其实就是一个容器(集合),存放数据库连接容器当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象......
  • Logstash 入门实战(3)--input plugin 介绍
    本文主要概述Logstash的一些最受欢迎的输入插件,以大致了解Logstash的用途;相关的环境及软件信息如下:CentOS 7.9、Logstash8.2.2。1、什么是Logstashinput插件Log......
  • Python程序员常犯的编码错误(二)
    1.引言本文是Python程序员常犯的编码错误的第二篇,在上一篇中我们重点介绍了常见的五种错误,本文继续介绍该话题,希望大家在日常生活中多多关注。闲话少说,我们直接开始吧!2.......
  • 2.ClickHouse系列之特点介绍
    1.列式存储采用列式存储时,数据在磁盘上的组织结构为:123张三李四王五182025好处:对于列的聚合、计数、求和等统计操作由于列式存储由于列数据类型相同,更容易......