zoukankan      html  css  js  c++  java
  • 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));
    
  • 相关阅读:
    第一阶段意见评论
    《大道至简》阅读笔记03
    大二下第十二周学习笔记
    《大道至简》阅读笔记02
    课上练习—单词统计
    大二下第十一周学习笔记
    《大道至简》阅读笔记01
    《人月神话》阅读笔记03
    大二下第十周学习笔记
    团队项目前期冲刺-10
  • 原文地址:https://www.cnblogs.com/jiangdewen/p/15115160.html
Copyright © 2011-2022 走看看