Java8之BASE64编解码
⼀、基础
Base64是⼀种⽤64个字符来表⽰任意⼆进制数据的⽅法。
⽤记事本打开exe、jpg、pdf这些⽂件时,我们都会看到⼀⼤堆乱码,因为⼆进制⽂件包含很多⽆法显⽰和打印的字符,所以,如果要让记事本这样的⽂本处理软件能处理⼆进制数据,就需要⼀个⼆进制到字符串的转换⽅法。Base64是⼀种最常见的⼆进制编码⽅法。
Base64的原理很简单,
第⼀步,准备⼀个包含64个字符的数组:
在线url网址编码解码A-Z, a-z, 0-9 , + , /
第⼆步,对⼆进制数据进⾏处理,每3个字节⼀组,⼀共是3x8=24bit,划为4组,每组正好6个bit,共64种编码,对应第⼀步中的64个字符:
这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。
所以,Base64编码会把3字节的⼆进制数据编码为4字节的⽂本数据,长度增加33%,好处是编码后的⽂本数据可以在邮件正⽂、⽹页等直接显⽰。
如果要编码的⼆进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64⽤\x00字节在末尾补⾜后,再在编码的末尾加上1个或2个=号,表⽰补了多少字节,解码的时候,会⾃动去掉。
⼆、Java8 与base64
Java8之前⼀直缺少BASE64编码解码 API,我们通常会选⽤第三⽅的API实现。但是,Java 8实现了BASE64编解码API,它包含到java.util包。下⾯我会对Java 8的BASE64 API做⼀个介绍。
java.util.Base64⼯具类提供了⼀套静态⽅法获取下⾯三种BASE64编解码器:
1)Basic编码
2)URL编码
3)MIME编码
对应的⽅法是:
Basic编码
Basic编码是标准的BASE64编码,⽤于处理常规的需求:输出的内容不添加换⾏符,⽽且输出的内容由64个基本字符等组成。下⾯是⽤法:
String str = Encoder().encodeToString("jazz好".getBytes("utf-8"));
System.out.println(str);
byte[] Decoder().decode(str);
System.out.println(new String(bytes,"utf-8"));
输出
amF6euWlvQ==
jazz好
URL编码
由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以⼜有⼀种”url safe”的base64编码,其实就是把字符+和/分别变成-和_
MIME编码
MIME编码器会使⽤基本的字母数字产⽣BASE64输出,⽽且对MIME格式友好:每⼀⾏输出不超过76个字符,⽽且每⾏以“\r\n”符结束。
对流的⽀持
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论