一、什么是Base64?

百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可

打印字符来表示二进制数据的方法”。

什么是“可打印字符”呢?为什么要用它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考一下什么情况下需要使用Base64?

Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转

换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。

什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只

能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。

二、Java中实现Base64

1、获取编码器

Base64的方法

//静态属性,该类使用RFC 4648和RFC 2045中规定的Base64编码方案来实现用于编码字节数据的编码器。
static class Base64.Encoder//返回一个Base64.Encoder编码使用URL and Filename safe型base64编码方案
static Base64.Encoder   getUrlEncoder()//返回一个Base64.Encoder编码使用MIME型base64编码方案。
static Base64.Encoder   getMimeEncoder()//返回一个Base64.Encoder ,它使用具有指定行长度和行分隔符的MIME类型base64编码方案进行编码。
static Base64.Encoder   getMimeEncoder(int lineLength, byte[] lineSeparator)//返回一个Base64.Encoder编码使用Basic型base64编码方案。
static Base64.Encoder   getEncoder()

2、编码器方法

Base64.Encoder的方法

byte[]   encode(byte[] src)//使用Base64编码方案将指定字节数组中的所有字节编码为新分配的字节数组。
//使用Base64编码方案对来自指定字节数组的所有字节进行编码,将生成的字节写入给定的输出字节数组,从偏移0开始。
int encode(byte[] src, byte[] dst)
//使用Base64编码方案将所有剩余字节从指定的字节缓冲区编码到新分配的ByteBuffer中。
ByteBuffer  encode(ByteBuffer buffer)
//使用Base64编码方案将指定的字节数组编码为字符串。
String  encodeToString(byte[] src)
//返回一个编码器实例,编码器等效于此编码器实例,但不会在编码字节数据的末尾添加任何填充字符。
Base64.Encoder  withoutPadding()
//使用Base64编码方案包装用于编码字节数据的输出流。
OutputStream    wrap(OutputStream os)

3、获取解码器

Base64的方法

//该类使用RFC 4648和RFC 2045中规定的Base64编码方案来实现用于解码字节数据的。
static class    Base64.Decoder//返回Base64.Decoder解码使用Basic型base64编码方案。
static Base64.Decoder   getDecoder()//返回一个Base64.Decoder解码使用MIME型BASE64解码方案。
static Base64.Decoder   getMimeDecoder()//返回Base64.Decoder解码使用URL and Filename safe型base64编码方案。
static Base64.Decoder   getUrlDecoder()

4、解码器方法

Base64.Decoder的方法

//使用Base64编码方案从输入字节数组中解码所有字节,将结果写入新分配的输出字节数组。
byte[]  decode(byte[] src)
//使用Base64编码方案从输入字节数组中解码所有字节,将结果写入给定的输出字节数组,从偏移0开始。
int decode(byte[] src, byte[] dst)
//使用Base64编码方案从输入字节缓冲区中解码所有字节,将结果写入新分配的ByteBuffer。
ByteBuffer  decode(ByteBuffer buffer)
//使用Base64编码方案将Base64编码的字符串解码为新分配的字节数组。
byte[]  decode(String src)
//返回一个输入流,用于解码Base64编码字节流。
InputStream wrap(InputStream is)

5、案例

// 编码
String encode = Base64.getEncoder().encodeToString("额我问问问".getBytes("UTF-8"));
System.out.println(encode);//6aKd5oiR6Zeu6Zeu6Zeu// 解码
byte[] decode = Base64.getDecoder().decode(encode);
System.out.println(new String(decode, "UTF-8"));//额我问问问

java-Base64编码工具类相关推荐

  1. 图片压缩处理以及网络图片转base64编码工具类

    一.需求分析 在项目中,需要对本地的图片进行缩放处理(按指定长宽缩放等),方便前端展示缩略图,获取更快的页面加载速度.另外就是针对网络上的图片需要进行base64编码处理(如百度信息流的图片上传需要对 ...

  2. 图片转Base64 编码工具类

    一.简介:本工具类包含本地图片转Base64编码 和 远程图片转 Base64编码 二.代码实例 package org.jeecg.common.util;import java.io.ByteAr ...

  3. Java(35):Java Base64编码和解码工具类

    Java Base64编码和解码工具类 Base64Util工具类: package com.ciphergateway.utils; import java.io.UnsupportedEncodi ...

  4. java前补零工具类_java生成编码工具类,不足补0

    ~~~~~ 小小工具类!你值得拥有 简单粗暴,直接上代码 import java.text.NumberFormat; /** * @author: Abner * @description: 编码工 ...

  5. Java 开发中常用的 4 种加密方法。MD5加密工具类测试 base64加密工具类测试 SHA加密工具类测试 BCrypt加密工具类测试

    一.工具类 1, md5加密工具类 2, base64加密工具类 3, Bcrypt工具类 二.加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一.工具类 1, ...

  6. md5编码java_MD5编码工具类 MD5Code.java

    package com.util; /** * MD5编码工具类 * */ public class MD5Code { static final int S11 = 7; static final  ...

  7. java md5 decode_MD5编码工具类 MD5Code.java

    1 packagecom.util;2 /** 3 * MD5编码工具类4 *http://www.cnblogs.com/sosoft/ 5 */ 6 public classMD5Code {7 ...

  8. MD5编码工具类 MD5Code.java

    1 package com.util; 2 /** 3 * MD5编码工具类 4 * 5 */ 6 public class MD5Code { 7 static final int S11 = 7; ...

  9. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  10. Java实现AES工具类(包含CBC和ECB)

    目录 一.简介 二.AES工具类 三.实践 3.1 AES之ECB模式加密 3.2 AES之ECB模式解密 3.3 AES之CBC模式加密 3.4 AES之CBC模式解密 结语 一.简介   密码学中 ...

最新文章

  1. WDF驱动中KMDF与UMDF区别
  2. 什么是DHCP?—Vecloud微云
  3. 3-unit1 IPv6网络的管理
  4. ARP(Address Resolution Protocol)地址解析协议初识
  5. boost线程(二)
  6. KeyboardEvent keyMap
  7. 洛谷—— P2658 汽车拉力比赛
  8. 在计算机网络中vc是,计算机网络——第一章 体系
  9. 赋能行业 共建生态 阿里巴巴首次亮相义乌标准展
  10. mysql 自增序列(转)
  11. NHibernate Issues之1898:命名查询
  12. Python设置随机数种子
  13. 2021 腾讯校招 + 后台开发面经(已 offer)
  14. Matlab:16进制excel转2进制mat
  15. 激发数据潜力,“东数西算”带动数据中心新发展
  16. 让 Odoo POS 支持廉价小票打印机
  17. Arduino ESP8266利用AJAX局部动态更新网页内容
  18. Unity3d开发之十二:邮箱正则验证js和c#
  19. 以DA方式通过opcdaauto.dll访问opc服务器异步操作异常0x80040200问题
  20. 微型计算机BX和AX区别,微机原理及接口技术-习题答案

热门文章

  1. iOS SDK详解之视频播放(AVPlayer)附Demo
  2. GPON介绍及华为OLT网关注册配置流程(转)
  3. CSS应用之绘制正六边形
  4. 《程序是怎样跑起来的》矢泽久雄[日] - 读书笔记
  5. Linux【挂载新的硬盘挂载系统镜像】
  6. Nero刻录ISO文件的过程步骤详解
  7. 从技术专家到总经理,在不确定中探索和成长
  8. ERNIE3.0多分类任务应用详细教程代码
  9. 深入理解Nginx~事件类配置项
  10. 简单MySQL数据库SQL文件