java8新特性Base64

前言:
为什么有时候用记事本打开exe,jpg,pdf这些文件会看到一堆乱码? 如何要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法,Base64是一种最常见的二进制编码方法。

我简述一下我为什么写这篇文章,在昨天发布了我的上一篇文章之后,我哥(目前架构师,我崇拜的对象)私聊我说你可以谢谢脱离框架的东西,其实对于我这种比较小白的人来说不知所措,他就给我推荐了Base64,说你可以看看别人写的,我一看,这不就是我前几天在做项目的时候用到的,但是当时只是做了搬运工,内在含义一点都不知道,我哥这么一点醒我,我沉思了一会,确实自己在学习或者做项目的过程中,太注重结果了,而没有注重过程,在此也给和我一样思想的人一个警醒,在不懂一个知识点的时候可以深究一下,下次用的时候就很明确为什么要这样写!

Base64

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z,a-z,数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。
Base64常用于在通常处理文本数据的场合,表示,传输,存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
Java 8包在java.util下面实现了Base64编解码,而且性能不俗,API也简单易懂,下面展示一下这个类的使用例子。
该类提供了一套静态方法获取下面三种Base64编解码器:

1.Basic编码:是标准的Base64编码,用于处理常规的需求

//编码
String asB64 = Base64.getEncoder().encodeToString(“huajiexuebiancheng”.getBytes());
System.out.println(asB64);//输出结果:aHVhamlleHVlYmlhbmNoZW5n
//解码
byte[] asBytes = Base64.getDecoder().decode(“aHVhamlleHVlYmlhbmNoZW5n”);
System.out.println(new String(asBytes));//输出结果:huajiexuebiancheng

2.URL编码:使用下划线替换URL里面的反斜线“/”

String urlEncoded = Base64.getUrlEncoder().encodeToString(“subjects?abcd”.getBytes());
System.out.println(urlEncoded);//输出结果:c3ViamVjdHM_YWJjZA==

3.MIME编码:使用基本的字母数字产生Base64输出,而且对MIME格式友好,每一行输出不超过76个字符,而且每行以“\r\n”符结束。

StringBuilder sb = new StringBuilder();
for(int i = 0;i<10;i++){
sb.append(UUID.randomUUID().toString());
}
byte[] toEncode = sb.toString().getBytes();
String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);
System.out.println(mimeEncoded);

Base64的编码解码工具

https://www.base64encode.org/
http://tool.oschina.net/encrypt?type=3

关注下面微信公众号获得更多学习资源!
java8新特性Base64