网站首页 > java教程 正文
为什么有时候用记事本打开exe,jpg,pdf这些文件会看到一堆乱码? 如何要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法,Base64是一种最常见的二进制编码方法。
Base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z,a-z,数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。
Base64常用于在通常处理文本数据的场合,表示,传输,存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
Java 8包在java.util下面实现了Base64编解码,而且性能不俗,API也简单易懂,下面展示一下这个类的使用例子。
该类提供了一套静态方法获取下面三种Base64编解码器:
1.Basic编码:是标准的Base64编码,用于处理常规的需求
//编码
String asB64 = Base64.getEncoder().encodeToString("huajiexuebiancheng".getBytes());
System.out.println(asB64);//输出结果:aHVhamlleHVlYmlhbmNoZW5n
//解码
byte[] asBytes = Base64.getDecoder().decode("aHVhamlleHVlYmlhbmNoZW5n");
System.out.println(new String(asBytes));//输出结果:huajiexuebiancheng
2.URL编码:使用下划线替换URL里面的反斜线“/”
String urlEncoded = Base64.getUrlEncoder().encodeToString("subjects?abcd".getBytes());
System.out.println(urlEncoded);//输出结果:c3ViamVjdHM_YWJjZA==
3.MIME编码:使用基本的字母数字产生Base64输出,而且对MIME格式友好,每一行输出不超过76个字符,而且每行以“\r\n”符结束。
StringBuilder sb = new StringBuilder();
for(int i = 0;i<10;i++){
sb.append(UUID.randomUUID().toString());
}
byte[] toEncode = sb.toString().getBytes();
String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);
System.out.println(mimeEncoded);
Base64的编码解码工具
https://www.base64encode.org/
http://tool.oschina.net/encrypt?type=3
猜你喜欢
- 2024-10-05 我的Java Web之路64 - 会话过期链接失效问题及转发和重定向解析
- 2024-10-05 Java Web项目部署(四)-Redis、Nginx
- 2024-10-05 “全栈2019”Java第八十四章:接口中嵌套接口详解
- 2024-10-05 “全栈2019”Java第九十八章:局部内部类访问作用域成员详解
- 2024-10-05 Spring Boot图片文件转Base64(springboot 图片文件转base64)
- 2024-10-05 “全栈2019”Java第八十五章:实现接口中的嵌套接口
- 2024-10-05 一条垃圾SQL,把 64 核 CPU 快跑崩了
- 2024-10-05 Base64与URLBase64浅析(base64_url)
- 2024-10-05 Java、JS、OC、Flutter的Base64编码和解码
- 2024-10-05 java处理图片与base64编码互相转换
你 发表评论:
欢迎- 最近发表
-
- JUC系列之《CompletableFuture:Java异步编程的终极武器》
- SpringBoot+Jasync异步化改造狂降90%耗时,百万并发下的性能杀戮
- Java异步编程神器:CompletableFuture实战技巧
- Spring Boot 异步请求 + 虚拟线程性能提升?结果很意外
- 异步可以单线程,但高并发的异步肯定要用线程池
- Java线程实现原理及相关机制_java线程的实现
- java线程终止 interrupt 关键字详解
- Java处理百万级消息积压方案_java 实时处理亿级数据
- 阻塞模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?
- 安卓7系统设置永不休眠_android 设置永不休眠
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)