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相关推荐

  1. Java8 Base64加密和解密

    在 Java8中 Base64编码已经成为Java类库的标准,且内置了Base64编码的编码器和解码器. 一.什么是Base64?  -- 来自百度百科 Base64是网络上最常见的用于传输 8Bit ...

  2. java8 base64_Java 8中的Base64 –加入乐趣为时不晚

    java8 base64 最后,Java 8发布了. 最后,有一种执行Base64编码的标准方法. 长期以来,我们一直依赖于Apache Commons Codec(无论如何还是很棒的). 内存敏感的 ...

  3. java8新特性(7)— Base64

    java8新特性(7)- Base64 新增Base64工具类 package com.common.jdk8;import java.io.UnsupportedEncodingException; ...

  4. java 和 Android Base64加密

    Java8 Base64 Java 8 新特性 在Java 8中,Base64编码已经成为Java类库的标准. Java 8 内置了 Base64 编码的编码器和解码器. Base64工具类提供了一套 ...

  5. Java8新特性学习记录

    前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...

  6. 一文看透java8新特性

    1.介绍 毫无疑问,Java 8发行版是自Java 5(发行于2004,已经过了相当一段时间了)以来最具革命性的版本.Java 8 为Java语言.编译器.类库.开发工具与JVM(Java虚拟机)带来 ...

  7. 【Java学习笔记之二十八】深入了解Java8新特性

    前言: Java 8 已经发布很久了,很多报道表明java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java ...

  8. 【转载保存】java8新特性学习

    编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版. 在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8--lambd ...

  9. Java8新特性教程 - 终极指南

    转载来源:https://www.javacodegeeks.com/2014/05/java-8-features-tutorial.html Java 8 新特性教程 - 终极指南 编者按:在这篇 ...

最新文章

  1. CSS:当子元素皆浮动,撑开父元素的3种方式
  2. u盘被分区之后怎么合并linux,U盘格式化做启动盘后从16GB变成200MB的解决方法
  3. c++ override final关键字
  4. MySQL执行计划解读
  5. Java 多线程同步和异步详解
  6. Codeforces 1329 题解
  7. 【MFC】类的层次结构图
  8. LVM与软RAID整理笔记
  9. Druid monitor中数据源只显示() property for user to setup(已解决)
  10. 触发器、作业、序列、连接
  11. js输入汉字转拼音简码和五笔简码
  12. Earfcn与Frequency转换
  13. 单目结构光三维扫描仪的标定与三维重建
  14. kasp技术原理_KASP 2x PCR Mix 说明书
  15. Python周刊518期
  16. 国外问卷调查该怎么做?入门须知!
  17. 2021年智能制造工程设计与应用类赛项:离散行业自动化方向(1)
  18. 学习聚宽4:函数 下单函数 自定义函数(笔记简单,但是需要重点看)
  19. i7 9750h和r7 5800h差距大不大
  20. 计算机毕业设计(70)php小程序毕设作品之干洗店洗衣小程序系统

热门文章

  1. 面试官 | 讲一下如何给高并发系统做限流?
  2. 【逆强化学习-2】最大熵学习(Maximum Entropy Learning)
  3. 关联数组(associative array)
  4. MFC设置对话框背景色及控件颜色
  5. php5..6中文帮助,6.5. IDE integration
  6. ASP.NET MVC 多语言开发简单案例
  7. android跑分和ios,手机:苹果VS安卓 跑分不代表手机流畅度
  8. 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
  9. python tk下拉列表_如何从Tkinter中的列表创建下拉菜单?
  10. 标题显示字数限制 html css,【紧急】我想问一下HTML的TITLE标签,里面的内容能填写多少个?有限制吗_html/css_WEB-ITnose...