“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法”。
什么是“可打印字符”呢?为什么要用它来传输8Bit字节码呢?在回答这两个问题之前我们有必要来思考一下什么情况下需要使用到Base64?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、127这33个字符属于控制字符,32~126这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。
@Test
public void test() throws UnsupportedEncodingException {
// 编码
String encode = Base64.getEncoder().encodeToString("So".getBytes("UTF-8"));
System.out.println(encode);
// 解码
byte[] decode = Base64.getDecoder().decode(encode);
System.out.println(new String(decode, "UTF-8"));
}
/**
* 判断base64字符串校验是否能生成图片方法
* @param imgBase64Str
* @return
* @throws Exception
*/
private boolean isImage(String imgBase64Str) throws Exception {
ByteArrayInputStream byteArrayInputStream = null;
try {
BASE64Decoder decoder = new BASE64Decoder();
byte[] byteArray = decoder.decodeBuffer(imgBase64Str);
byteArrayInputStream = new ByteArrayInputStream(byteArray);
BufferedImage bufImg = ImageIO.read(byteArrayInputStream);
if (bufImg == null) {
logger.info("base64字符串不正确,生成图片失败:str={}"+ imgBase64Str);
return false;
}
} finally {
if (byteArrayInputStream != null) {
byteArrayInputStream.close();
}
}
return true;
}
//将base64变为流
InputStream inputStream = null;
try {
//将字符串转换为byte数组
byte[] bytes = new BASE64Decoder().decodeBuffer(url.trim());
//转化为输入流
inputStream = new ByteArrayInputStream(bytes);