jdk1.8新增了Base64编解码功能;

提供了3种Base64编码方式:

  1. Basic:Base64.getEncoder()和Base64.getDecoder()

编码输出组成:大小写字母、数字、+、/

如果编码后的二进制长度非3的倍数则会使用=补齐,所以编码后会有0-2个=在结尾,不需要补齐可以使用Base64.getEncoder().withoutPadding();(下同)

  1. URL and Filename safe:Base64.getUrlEncoder()和Base64.getUrlDecoder()

编码输出组成:大小写字母、数字、-、_

编码后不包含“/”等特殊字符,不会对url或者文件名或者路径造成干扰;

  1. MIME:Base64.getMimeEncoder()、Base64.getMimeEncoder(lineLength, lineSeparator)和Base64.getMimeDecoder()

编码输出组成跟Basic一样,不过限制了每行的长度和每行的分隔符,默认的每行不超过76个字符并且用\r\n作为换行符,也可以自定义行长度和行分隔符;

指定行长的时候会四舍五入到4的倍数长度(向下取到4的倍数的长度,如果长度<=0则不会分行);

指定的分隔符不能包含编码表里的字符(不能包含Basic里的:大小写字母、数字、+、/,但是可以包含-和_);

Encoder可以使用的编码方法:

Decoder可以使用的解码方法:

小Demo:

@Testpublic void test() {System.out.println("========1=======");Encoder baseEncoder = Base64.getEncoder();Decoder baseDecoder = Base64.getDecoder();String s1 = baseEncoder.encodeToString("12345678?abcd".getBytes());System.out.println(s1);byte[] bytes1 = baseDecoder.decode(s1);System.out.println(new String(bytes1));System.out.println("========2=======");Encoder urlEncoder = Base64.getUrlEncoder();Decoder urlDecoder = Base64.getUrlDecoder();String s2 = urlEncoder.encodeToString("12345678/abcde".getBytes());System.out.println(s2);byte[] bytes2 = urlDecoder.decode(s2);System.out.println(new String(bytes2));System.out.println("========3=======");Encoder mimeEncoder = Base64.getMimeEncoder();Decoder mimeDecoder = Base64.getMimeDecoder();String s3 = mimeEncoder.encodeToString("123abc测试123abc测试123abc测试123abc测试123abc测试123abc测试".getBytes());System.out.println(s3);byte[] bytes3 = mimeDecoder.decode(s3);System.out.println(new String(bytes3));System.out.println("========4=======");Encoder mimeEncoder4 = Base64.getMimeEncoder(4, "~".getBytes());Encoder mimeEncoder5 = Base64.getMimeEncoder(5, "~".getBytes());Encoder mimeEncoder6 = Base64.getMimeEncoder(6, "~".getBytes());Encoder mimeEncoder7 = Base64.getMimeEncoder(7, "~".getBytes());Encoder mimeEncoder8 = Base64.getMimeEncoder(8, "_".getBytes());Encoder mimeEncoder9 = Base64.getMimeEncoder(9, "_".getBytes());Encoder mimeEncoder10 = Base64.getMimeEncoder(10, "_".getBytes());System.out.println(mimeEncoder4.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));System.out.println(mimeEncoder5.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));System.out.println(mimeEncoder6.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));System.out.println(mimeEncoder7.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));System.out.println(mimeEncoder8.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));System.out.println(mimeEncoder9.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));System.out.println(mimeEncoder10.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));}

输出:

jdk1.8——Base64相关推荐

  1. jdk1.8 base64注意事项

    由于jdk1.7和jdk1.8内置的Base64遵守的RFC协议不一致,jdk1.7按照照RFC1521实现的,jdk1.8是按照rfc4648和rfc2045两个协议来实现的.具体可以从类注释中查询 ...

  2. sun.misc.BASE64Encoder加密jdk1.8中Base64解密报错分析

    sun.misc.BASE64Encoder一行不能超过76字符,超过则添加回车换行符. 源码 public void encode(InputStream var1, OutputStream va ...

  3. Java中的Base64详解

    详解Java中的Base64原理跟用法 简介 ​ Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编 ...

  4. jdk1.8以前不建议使用其自带的Base64来加解密

    JDK1.8之前的base64是内部测试使用的代码,不建议生产环境使用,而且未来可能会移除, JDK1.8提供最新可以正式使用的Base64类, 不要使用JDK中自带的sun.misc.BASE64D ...

  5. java和mysql中md5+base64的执行结果

    目录 前言 java md5+base64 java md5+base64:commons-codec java md5+base64:shiro-core java covertToString(m ...

  6. Base64加密---加密学习笔记(一)

    密码的常用术语: (一) 明文:待加密信息 密文:经过加密后的明文 加密:明文转为密文的过程 加密算法:明文转为密文的转换算法 加密密钥:通过加密算法进行加密操作用的密钥 解密:将密文转为明文的过程 ...

  7. Base64 + 变为 空格 问题分析

    JDK1.8之前Base64是第三方的,1.8已经纳入JDK中,JAVA就是这么谦虚. 话不多说,很多人应该遇到过Base64 encode之后再decode出错的问题,问题一般都是由于发起了URL请 ...

  8. java.util.base64报错解决

    java.util.Base64 这个类,它是在 JDK 1.8 的时候加入的,之前版本的标准库没有这个类. eclipse更换jdk1.8就可以了了. 转载于:https://www.cnblogs ...

  9. Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别

    Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化. Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于 ...

最新文章

  1. LeetCode 47. 全排列 II
  2. zendopcache代替APC效果不错
  3. Linux系统网卡配置方法
  4. mysql定义shell变量_shell 变量的定义,赋值,运算
  5. 计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc
  6. 2021汉语言文学对高考成绩查询,2021汉语言文学专业就业前景怎么样
  7. 福利网站!程序员面试——算法工程师面试大全第四部分
  8. 小米回应造车传闻;饿了么就春节“套路”骑手活动致歉;Go 1.16 正式发布 | 极客头条...
  9. 4.1 tensorflow2实现Kruskal - Wallis 检验 ——python实战
  10. Oracle9iClient简化版的安装与tnsnames配置,sqlplus的连接
  11. 无人机get新技能,惹黑熊心跳加速
  12. 阿正喜欢的演讲系列连载(一):大法官约翰·罗伯茨-我祝你不幸(I Wish You Bad Luck)
  13. 小猿圈python之python期末考试测试题(二)_小猿圈Python开发面试题(一)
  14. Lesson 5 The facts 确切数字
  15. 微信windows版_微信悄悄更新,这个烦人的功能限制,终于被取消
  16. 【Creo5.0二次开发参数化】选择装配
  17. Content Provider启动浅析
  18. 送书 | 《数据产品经理:实践进阶》
  19. 一篇文章了解爬虫的方方面面
  20. 加息和提高存款准备金的影响

热门文章

  1. 使用jqury的心得
  2. linux find返回数据不一样,Linux学习笔记——find命令
  3. wannier插值能带拟合5
  4. 使用conda时出现Solving environment: failed with initial frozen solve. Retrying with flexible solve错误
  5. 通信原理课程设计报告
  6. 最常见的几种手机快充方式和原理
  7. 源码中的@hide注释和{@hide}注释的差异
  8. 上市公司杰创智能携手甄云,启动供应链采购数字化升级
  9. 计算机硬件技术心得,计算机硬件技术基础学习心得.doc
  10. java jdk15.0.1环境配置(图文教程)