并非所有数据都可以用String类型来显示(例如字节流数据),但是都可以转为byte数组后进行base64编码再转String来显示,使用的时候再解码成原数据即可。jdk8提供了Base64的支持、使用非常简单。只需区分开encode与decode即可。
encode:编码,可以将任意数据进行base64编码
//byte数组进行编码
byte[] bytes = new byte[1024];
byte[] encode = Base64.getEncoder().encode(bytes);
decode:解码,用户将进行了base64编码的数据还原
//编码结果进行Base64解码,解码得到的byte数组即为编码源数组
byte[] encode = Base64.getDecoder().decode(encode);
所有对象类型支持Base64编码解码。
java所有对象都是继承了Object的,请看以下代码。可以确定java的所有对象类型皆可采用base64编码后传输,解码获取。
//Base64解码为String类型
String str1 = new String(Base64.getDecoder().decode(encode2));
System.out.println("原文原文文"+msg1);
System.out.println("编码解码后"+str1);
//获取 Long 类型Base64编码
Object oldObject = new Long("12354687");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(oldObject);
//原对象字节数组
byte[] bytes = outputStream.toByteArray();
//编码后字节数组
byte[] encode3 = Base64.getEncoder().encode(bytes);
//解码后字节数组
byte[] decode1 = Base64.getDecoder().decode(encode3);
//此处可以通过循环判定内容是否变更,由于字节数组内容完全相等,所以”不想等“字符串永不打印
if(bytes.length==decode1.length){
for (int i = 0; i < decode1.length; i++) {
if(bytes[i]!=decode1[i]){
System.out.println("不相等");
}
}
}
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(decode1);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
Object newObject = objectInputStream.readObject();
System.out.println("新旧对象是否相等:"+newObject.equals(oldObject));