场景
-
有时候我们需要在
XML文件里保存一个缩略图,但是XML不支持不可见字符的保存,如何做? -
当我们需要在
URL里POST或PUT一些不可见字符或特殊符号,比如+号,如何做?
说明
-
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范. -
对于以上的问题可以通过
Base64把缩略图内容直接转码为可见的字符就能存储在XML文档里. -
对于特殊字符作为的
URL或者HTTP头或者密码,也可以通过Base64转码之后再提交. -
在
JDK8之前,Java SE并没有提供公共的Base64方法,只有未文档化的sun.misc.BASE64Encoder.现在JDK8在包java.util.Base64里提供了工厂方法实现.
例子
- 文件TestBase64.java
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
/**
* TestBase64
*/
public class TestBase64 {
public static void PRINT(String str) {
System.out.println(str);
}
private static void testBase64(){
// base64编码
PRINT("====================== testBase64 =======================");
PRINT("====================== encoder =======================");
Base64.Encoder encoder = Base64.getEncoder();
String normalString = "https://infoworld.blog.youkuaiyun.com++";
String encodedString = encoder.encodeToString(
normalString.getBytes(StandardCharsets.UTF_8));
PRINT(encodedString);
// base64解码
PRINT("=================== decoder ==========================");
Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedByteArray = decoder.decode(encodedString);
String buf = new String(decodedByteArray);
PRINT(buf);
// 编码文件
PRINT("====================== mimeEncoder =======================");
Path originalPath = Paths.get("1.txt");
Path targetPath = Paths.get("1-base64.txt");
Base64.Encoder mimeEncoder = Base64.getMimeEncoder();
try (OutputStream output = Files.newOutputStream(targetPath)) {
Files.copy(originalPath, mimeEncoder.wrap(output));
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
testBase64();
}
}
- 1-base64.txt
aHR0cHM6Oi8vaW5mb3dvcmxkLmJsb2cuY3Nkbi5u
- 输出:
====================== testBase64 =======================
====================== encoder =======================
aHR0cHM6Ly9pbmZvd29ybGQuYmxvZy5jc2RuLm5ldCsr
=================== decoder ==========================
https://infoworld.blog.youkuaiyun.com++
====================== mimeEncoder =======================
本文介绍Base64编码如何解决XML文件存储缩略图及URL中特殊字符的问题,展示了在Java中使用Base64进行编码和解码的示例,包括字符串和文件的处理。
329

被折叠的 条评论
为什么被折叠?



