Java8————Base64
Base64?
Base64是一种用64个字符来表示任意二进制数据的方式。
对于二进制文件如图片、exe、音频、视频等,包含很多无法显示和打印的字符,如果希望能够通过记事本这样的文本处理软件处理二进制数据,就需要一个二进制转字符串的转换方法。
Base64是一种非常常用的二进制编解码方案。编解码方法简单且公开,并不具有加密解密的效用。只作为一种二进制数据的文本存储格式。
Base64的64个字符
64个字符,每个字符代表一种编码,共64种编码。
A-Z , a-z , 0-9 , + , /
Base64的编码原理
对于长短不一的二进制数据,Base64将其从头部开始以三个字节为一组(24 bit),一组划分成4等块(每块6 bit),根据乘法原理,这6bit的二进制共有2^6 = 64种编码方式,正好对应64个字符。
换句话说,Base64将二进制数据从头开始,每6 bit 用一个字符(64个基本字符中的一个)代替表示,一直到二进制数据末尾。
不论是Unicode字符集(Java默认,一个英文字符2个字节),还是UTF-8(一个英文字符1个字节),亦或是ASCII(一个英文字符一个字节),二进制数据通过Base64进一步转化后长度一定是增加的。虽然增加了网络传输量,但是好处是不会存在因为无法显示或打印的字符而造成数据的丢失,保证了数据在传输中的完整性。
Base64的补位
Base64要求转化后的结果必须能被 4 整除,也就是说二进制数据字节数必须是3的倍数,如果末尾多出一个或两个字节,Base64会额外补充一个“=” 或两个“=”,表示补了多少个字节,在解码的时候会自动去掉。
Java8的Base64
在Java8之前一直是缺少Base64编码解码的API,我们通常会使用第三方工具。
Java8 为开发者提供了 java.util.Base64 的工具类,并提供一套静态方法获取三种Base64编解码器:
1)Basic编码
2)URL编码
3)MIME编码
Basic编码
Basic编码是标准的Base64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由64个基本字符组成。
try {String encoded = Base64.getEncoder().encodeToString("Will Smith = 威尔·史密斯".getBytes("UTF-8"));System.out.println(encoded);String decoded = new String(Base64.getDecoder().decode(encoded));System.out.println(decoded);
} catch (UnsupportedEncodingException e) {e.printStackTrace();
}
输出:
URL编码
由于标准的Basic编码可能会出现+ 和 / ,在URL中就不能直接作为参数,所以又有一种“url safe” 的Base64编码,其实就是吧字符 + 和 / 分别变成 - 和_
MIME编码
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用对应的应用程序来打开的方式类型。
它是一种互联网标准,扩展了电子邮件标准,使其可以支持:非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分组成的消息体;包含非ASCII字符的头信息等。
举个栗子:右键中有一个Word附件(二进制文件),点击预览,浏览器会直接打开Office。可以理解为MIME设定了这种对应关系。
MIME编码器会使用基本的字母数字产生BASE64输出,而且对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束。
Java8————Base64相关推荐
- Java8 Base64加密和解密
在 Java8中 Base64编码已经成为Java类库的标准,且内置了Base64编码的编码器和解码器. 一.什么是Base64? -- 来自百度百科 Base64是网络上最常见的用于传输 8Bit ...
- java8 base64_Java 8中的Base64 –加入乐趣为时不晚
java8 base64 最后,Java 8发布了. 最后,有一种执行Base64编码的标准方法. 长期以来,我们一直依赖于Apache Commons Codec(无论如何还是很棒的). 内存敏感的 ...
- java8新特性(7)— Base64
java8新特性(7)- Base64 新增Base64工具类 package com.common.jdk8;import java.io.UnsupportedEncodingException; ...
- java 和 Android Base64加密
Java8 Base64 Java 8 新特性 在Java 8中,Base64编码已经成为Java类库的标准. Java 8 内置了 Base64 编码的编码器和解码器. Base64工具类提供了一套 ...
- Java8新特性学习记录
前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...
- 一文看透java8新特性
1.介绍 毫无疑问,Java 8发行版是自Java 5(发行于2004,已经过了相当一段时间了)以来最具革命性的版本.Java 8 为Java语言.编译器.类库.开发工具与JVM(Java虚拟机)带来 ...
- 【Java学习笔记之二十八】深入了解Java8新特性
前言: Java 8 已经发布很久了,很多报道表明java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java ...
- 【转载保存】java8新特性学习
编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版. 在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8--lambd ...
- Java8新特性教程 - 终极指南
转载来源:https://www.javacodegeeks.com/2014/05/java-8-features-tutorial.html Java 8 新特性教程 - 终极指南 编者按:在这篇 ...
最新文章
- CSS:当子元素皆浮动,撑开父元素的3种方式
- u盘被分区之后怎么合并linux,U盘格式化做启动盘后从16GB变成200MB的解决方法
- c++ override final关键字
- MySQL执行计划解读
- Java 多线程同步和异步详解
- Codeforces 1329 题解
- 【MFC】类的层次结构图
- LVM与软RAID整理笔记
- Druid monitor中数据源只显示() property for user to setup(已解决)
- 触发器、作业、序列、连接
- js输入汉字转拼音简码和五笔简码
- Earfcn与Frequency转换
- 单目结构光三维扫描仪的标定与三维重建
- kasp技术原理_KASP 2x PCR Mix 说明书
- Python周刊518期
- 国外问卷调查该怎么做?入门须知!
- 2021年智能制造工程设计与应用类赛项:离散行业自动化方向(1)
- 学习聚宽4:函数 下单函数 自定义函数(笔记简单,但是需要重点看)
- i7 9750h和r7 5800h差距大不大
- 计算机毕业设计(70)php小程序毕设作品之干洗店洗衣小程序系统
热门文章
- 面试官 | 讲一下如何给高并发系统做限流?
- 【逆强化学习-2】最大熵学习(Maximum Entropy Learning)
- 关联数组(associative array)
- MFC设置对话框背景色及控件颜色
- php5..6中文帮助,6.5. IDE integration
- ASP.NET MVC 多语言开发简单案例
- android跑分和ios,手机:苹果VS安卓 跑分不代表手机流畅度
- 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
- python tk下拉列表_如何从Tkinter中的列表创建下拉菜单?
- 标题显示字数限制 html css,【紧急】我想问一下HTML的TITLE标签,里面的内容能填写多少个?有限制吗_html/css_WEB-ITnose...