当前位置:   article > 正文

base64编码的三种方式、各方式性能比较_base64decoder().decodebuffer

base64decoder().decodebuffer


转载链接:java 实现base64编码的三种方式、各方式性能比较、最后给出最优工具类 小白实操记录

转载内容:


简单介绍了base64编码,给出三种实现方式性能比较,可直接使用最后提供的工具类,性能比较不必细看,没营养。

 
1 base64编码
将字符串编码成[0-9a-zA-Z+/=]的格式,通过解码又可以换成成原有的样子,就是这么简单。

我爱编码!--> 5oiR54ix57yW56CB77yB---我爱编码

2 三种实现方式性能比较

  1. package util.base64;
  2.  
  3. import java.io.IOException;
  4. import java.io.UnsupportedEncodingException;
  5. import java.util.Date;
  6. import sun.misc.BASE64Decoder;
  7. import sun.misc.BASE64Encoder;
  8. import org.apache.commons.codec.binary.Base64;
  9.  
  10. /**
  11.  *
  12.  * base64编码实现的三种实现方式性能测试,推荐使用Java8提供的方法
  13.  *
  14.  */
  15. public class BASE64EncoderTest {
  16.  
  17.     /**
  18.      * 实际测试编码与解码速度的话,Java 8提供的Base64比Apache Commons Codec提供的还要快
  19.      * ,Apache Commons Codec提供的比sun.misc提供的还要快。
  20.      * 因此在Java上若要使用Base64,这个Java 8的java.util提供的Base64类是首选!
  21.      *
  22.      *
  23.      *
  24.      * @param args
  25.      */
  26.     public static void main(String[] args){
  27.  
  28.         sunMiscDemo();
  29.         apacheCommonsCodecDemo();
  30.         java8UtilDemo();
  31.  
  32.     }
  33.  
  34.     /**
  35.      * 早期在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和
  36.      * BASE64Decoder这两个类别,用法如下:
  37.      *Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.
  38.      * BASE64Encoder/BASE64Decoder类。
  39.      * 这个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。
  40.      * 但是在Eclipse和MyEclipse中直接使用,却找不到该类。解决方法如下:
  41.      */
  42.     public static void sunMiscDemo() {
  43.         BASE64Encoder encoder = new BASE64Encoder();
  44.         BASE64Decoder decoder = new BASE64Decoder();
  45.         String str = "字串文字";
  46.         String strEncoder = null;
  47.         String strDecoder = null;
  48.  
  49.         Long startDate = new Date().getTime();
  50.         for(int i = 0; i < 1000000; i++){
  51.             //编码
  52.             try {
  53.                 strEncoder = encoder.encode(str.getBytes("UTF-8"));
  54.                 //System.out.println("strEncoder=" + strEncoder);
  55.             } catch (UnsupportedEncodingException e) {
  56.                 e.printStackTrace();
  57.             }
  58.  
  59.             //解码
  60.             try {
  61.                 strDecoder = new String(decoder.decodeBuffer(strEncoder), "UTF-8");
  62.                 //System.out.println("strDecoder=" + strDecoder);
  63.             } catch (UnsupportedEncodingException e) {
  64.                 e.printStackTrace();
  65.             } catch (IOException e) {
  66.                 e.printStackTrace();
  67.             }
  68.  
  69.  
  70.  
  71.         }
  72.         Long endDate = new Date().getTime();
  73.         System.out.println("SunMis test 100w次 加密解密耗时:" + (endDate - startDate));
  74.     }
  75.  
  76.     /**
  77.      * Apache Commons Codec有提供Base64的编码与解码功能,会使用到
  78.      * org.apache.commons.codec.binary套件下的Base64类别
  79.      */
  80.     public static void apacheCommonsCodecDemo() {
  81.         Base64 base64 = new Base64();
  82.         String str = "字串文字";
  83.         String strEncode = null;
  84.         String strDecode = null;
  85.  
  86.             Long startDate = new Date().getTime();
  87.             for(int i = 0; i < 1000000; i++){
  88.                 byte[] b = null;
  89.                 //编码
  90.                 try {
  91.                     strEncode = new String(base64.encode(str.getBytes("UTF-8")), "UTF-8");
  92.                 } catch (UnsupportedEncodingException e) {
  93.                     e.printStackTrace();
  94.                 }
  95.                 //解码
  96.                 try {
  97.                     strDecode = new String(base64.decode(strEncode.getBytes("UTF-8")), "UTF-8");
  98.                 } catch (UnsupportedEncodingException e) {
  99.                     e.printStackTrace();
  100.                 }
  101.  
  102.  
  103.         }
  104.         Long endDate = new Date().getTime();
  105.         System.out.println("ApacheCommons  test 100w次耗时:" + (endDate - startDate));
  106.     }
  107.  
  108.     /**
  109.      * Java 8之后的作法
  110.      * Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码,用法如下:
  111.      *
  112.      */
  113.     public static void java8UtilDemo() {
  114.         java.util.Base64.Encoder encoder = java.util.Base64.getEncoder();
  115.         java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();
  116.         String str = "字串文字";
  117.         String strEncoder = null;
  118.         String strDecoder = null;
  119.  
  120.             Long startDate = new Date().getTime();
  121.             for(int i = 0; i < 1000000; i++){
  122.                 //编码
  123.                 try {
  124.                     strEncoder = encoder.encodeToString(str.getBytes("UTF-8"));
  125.                 } catch (UnsupportedEncodingException e) {
  126.                     e.printStackTrace();
  127.                 }
  128.                 //解码
  129.                 try {
  130.                     strDecoder = new String(decoder.decode(strEncoder), "UTF-8");
  131.                 } catch (UnsupportedEncodingException e) {
  132.                     e.printStackTrace();
  133.                 }
  134.             }
  135.             Long endDate = new Date().getTime();
  136.             System.out.println("Java8 test 100w次耗时:" + (endDate - startDate));
  137.  
  138.           }
  139.  
  140. }


运行结果:

3 最优方式工具类 

  1. package util.base64;
  2. import java.util.Base64;
  3.  
  4. /**
  5.  * base64 加密解密
  6.  */
  7. public class Base64UtilXb {
  8.     public static void main(String[] args) {
  9.         System.out.println(encrypt("我爱编码!"));
  10.     }
  11.      /**
  12.      * BASE64加密
  13.      */
  14.     public static String encrypt(String str){
  15.         if(str==null)return null;
  16.         byte[] bytes = str.getBytes();
  17.         //Base64 加密
  18.         String encoded = Base64.getEncoder().encodeToString(bytes);
  19.         System.out.println("Base 64 加密后:" + encoded);
  20.         return encoded;
  21.     }
  22.  
  23.     /**
  24.      * BASE64解密
  25.      * @throws Exception
  26.      */
  27.     public static String  decrypt(String key)  {
  28.         if(key==null)return null;
  29.         byte[] decoded = Base64.getDecoder().decode(key);
  30.         String decodeStr = new String(decoded);
  31.         System.out.println("Base 64 解密后:" + decodeStr);
  32.         return decodeStr;
  33.     }
  34.  
  35. }


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/1020258
推荐阅读
相关标签
  

闽ICP备14008679号