• java base64编码、解码的三种方式


    java base64与字符串String之间的相互转换

    1.方式一:DatatypeConverter

      说明:使用jdk自带的DatatypeConverter.java类实现,但是jdk版本必须>=1.6。

    import java.io.UnsupportedEncodingException;
    import javax.xml.bind.DatatypeConverter;

      编码

    /**
     * base64编码之方法一
     * @explain DatatypeConverter.java实现
     * @param str
     *            待编码字符串
     * @return 编码字符串
     */
    public static String encode(String str) {
    	// base64字符串
    	String base64Str = "";
    	try {
    		// String-->byte[]
    		byte[] data = str.getBytes("utf-8");
    		// 编码
    		base64Str = DatatypeConverter.printBase64Binary(data);
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	return base64Str;
    }  

      解码

    /**
     * base64解码之方法一
     * @explain DatatypeConverter.java实现
     * @param base64Str
     *            待解码字符串
     * @return 解码字符串
     */
    public static String decode(String base64Str) {
    	// 解码后的字符串
    	String str = "";
    	// 解码
    	byte[] base64Data = DatatypeConverter.parseBase64Binary(base64Str);
    	try {
    		// byte[]-->String
    		str = new String(base64Data, "utf-8");
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	return str;
    }  

    2.方式二:Base64

      说明:使用jdk自带的Base64.java类实现,但是jdk版本必须>=1.8。

    import java.io.UnsupportedEncodingException;
    import java.util.Base64;
    

      编码

    /**
     * base64编码之方法二
     * @explain Base64.java实现
     * @param str
     *            待编码字符串
     * @return 编码字符串
     */
    public static String encode2(String str) {
    	// base64字符串
    	String base64Str = "";
    	try {
    		// String-->byte[]
    		byte[] data = str.getBytes("utf-8");
    		// 编码
    		base64Str =Base64.getEncoder().encodeToString(data);
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	return base64Str;
    }  

      解码

    /**
     * base64解码之方法二
     * @explain Base64.java实现
     * @param base64Str
     *            待解码字符串
     * @return 解码字符串
     */
    public static String decode2(String base64Str) {
    	// 解码后的字符串
    	String str = "";
    	// 解码
    	byte[] base64Data = Base64.getDecoder().decode(base64Str);
    	try {
    		// byte[]-->String
    		str = new String(base64Data, "utf-8");
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	return str;
    } 

    3.方式三:Base64

      所需jar包:commons-codec.jar

    import java.io.UnsupportedEncodingException;
    import org.apache.commons.codec.binary.Base64;
    

      编码

    /**
     * base64编码之方法三
     * @explain Base64.java实现
     * @param str
     *            待编码字符串
     * @return 编码字符串
     */
    public static String encode3(String str) {
    	// base64字符串
    	String base64Str = "";
    	try {
    		// String-->byte[]
    		byte[] data = str.getBytes("utf-8");
    		// 编码
    		base64Str =Base64.encodeBase64String(data).replaceAll("
    ", "");
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	return base64Str;
    }
    

      解码

    /**
     * base64解码之方法三
     * @explain Base64.java实现
     * @param base64Str
     *            待解码字符串
     * @return 解码字符串
     */
    public static String decode3(String base64Str) {
    	// 解码后的字符串
    	String str = "";
    	// 解码
    	byte[] base64Data = Base64.decodeBase64(base64Str);
    	try {
    		// byte[]-->String
    		str = new String(base64Data, "utf-8");
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	return str;
    }
    

    4.测试

    public static void main(String[] args) {
    	String str = "http://www.cnblogs.com/Marydon20170307";
    	String base64 = Base64Utils.encode(str);// aHR0cDovL3d3dy5jbmJsb2dzLmNvbS9NYXJ5ZG9uMjAxNzAzMDc=
    	System.out.println(base64);
    	String str2 = Base64Utils.decode(base64);
    	System.out.println(str.equals(str2));// true
    	
    }
    

    5.效率比较

      快-->慢:方式二 > 方式一 > 方式三

      因此,如果项目用的是jdk1.8,最佳选择是方式二;jdk1.6,最佳选择是方式一。

     

  • 相关阅读:
    Jmeter实现dubbo接口压测案例
    Jmeter性能测试报告扩展
    Jmeter3.2源码编译环境搭建
    JMeter中添加dubbo相关插件异常问题解决
    JMeter3.0启动日志报错WARN
    JMeter关联的几种方式总结案例
    JMeter调试参数是否取值正确,调试正则提取的结果(log.info|log.error|print)
    jdk1.7更新visualvm插件
    如何自定义 maven中的archetype
    java提高篇(四)-----理解java的三大特性之多态
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9358776.html
Copyright © 2020-2023  润新知