java Base64编码、解码


并非所有数据都可以用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));
posted @ 2021-08-08 16:05  临渊不羡渔  阅读(3849)  评论(0编辑  收藏  举报