1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java如何实现Base64编解码?实现Base64编解码4中方法

Java如何实现Base64编解码?实现Base64编解码4中方法

时间:2022-09-09 01:36:52

相关推荐

Java如何实现Base64编解码?实现Base64编解码4中方法

Java|java教程

Java,Base64编解码

Java-java教程

本篇文章给大家带来的内容是介绍Java如何实现Base64编解码?实现Base64编解码4中方法 。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

试客网源码破解,VScode设置覆盖标记,ubuntu 应用编程,tomcat内存升高,c sqlite创建表语句,t4模版插件,ssm框架前端使用的技术教程,爬虫养殖箱设计图纸,页面引入php,武汉seo优化批发,网站程序安装教程,网页 分层加载,.net 模板lzw

为什么要用Base64编码

php仿hao123源码,vscode 不联网启动,lefi安装ubuntu,tomcat迁移环境,如何用sqlite打开微,幸福的爬爬虫小说作者txt,三目运算符php,黄冈seo优化厂家,dj音乐网站源码,html 网页介绍学校模板,网页模板 framelzw

在网络中传输数据都是使用ascii方式传输。对于一些图片、视频等数据,可能就会被编码成ascii中不可见部分的编码。网络中不同的路由设备处理方式不同,有可能就会把这部分数据弄丢了。为了保证数据传输的正确性,可以使用Base64编码将这些不可见数据编码成可见数据。

水果网销平台源码,ubuntu设置黑屏时间,js+图片+爬虫,php开启安全,登封seo外包lzw

Java实现Base64编解码的几种方法

方法一

使用sun.misc包中的BASE64Encoder和BASE64Decoder类进行编解码。这种方式比较古老,不推荐使用。

代码如下:

/** * sun.misc方式Base64编码 * @param str * @return */ public static String encodeBySunMisc(String str) { try {return new BASE64Encoder().encode(str.getBytes("UTF-8")); }catch (UnsupportedEncodingException e) {e.printStackTrace(); return ""; } } /** * sun.misc方式Base64解码 * @param str * @return */ public static String decodeBySunMisc(String str) { try {byte[] result = new BASE64Decoder().decodeBuffer(str);return new String(result); }catch (IOException e) {e.printStackTrace(); return ""; } }

sun.misc的Base64工具虽然在jdk中,但是并不属于标准库,所以在Eclipse中无法直接使用。可以通过手动引入方式使用。

解决方法:

右键工程->Properties->Java Build Path->Libraries,点击Add External Jars,选择%JAVA_HOME%\jre\lib\rt.jar即可。

方法二

使用Apache的commons-code包。这种方式比sun.misc方式要稍快一些。

代码如下

/** * commons-code方式Base64编码 * @param str * @return */ public static String encodeByCommonsCode(String str) {byte[] result;try {result = mons.codec.binary.Base64.encodeBase64(str.getBytes("UTF-8")); return new String(result); }catch (UnsupportedEncodingException e) {e.printStackTrace(); return ""; } } /** * commons-code方式Base64解码 * @param str * @return */ public static String decodeByCommonsCode(String str) {byte[] result = mons.codec.binary.Base64.decodeBase64(str.getBytes());return new String(result); }

使用commons-code需要引入依赖。以gradle工程为例,需要在build.gradle中添加以下行:

implementation commons-codec:commons-codec:1.11

方法三

使用Apache的xerces工具。这个工具主要用于解析xml的,具有Base64编解码功能。

代码如下:

/** * xerces方式Base64解码 * @param str * @return */ public static String decodeByXerces(String str) { try {byte[] result = .apache.xerces.internal.impl.dv.util.Base64.decode(str);return new String(result); }catch (Exception e) {e.printStackTrace();return ""; } } /** * Java8中的Base64编码 * @param str * @return */ public static String encodeByJava8(String str) {try {return Base64.getEncoder().encodeToString(str.getBytes("UTF-8")); }catch (Exception e) {e.printStackTrace(); return ""; } }

方法四

Java8的util套件中已经自带Base64编解码工具,并且效率非常高,推荐使用这种方式。

代码如下:

/** * Java8中的Base64编码 * @param str * @return */ public static String encodeByJava8(String str) {try {return Base64.getEncoder().encodeToString(str.getBytes("UTF-8")); }catch (Exception e) {e.printStackTrace(); return ""; } } /** * Java8中的Base64解码 * @param str * @return */ public static String decodeByJava8(String str) { byte[] result = Base64.getDecoder().decode(str.getBytes()); return new String(result); }

测试几种编码效果:

测试代码如下:

private static void testEncodeAndDecode(String src) { String encedeStr1 = encodeBySunMisc(src); System.out.println("encode by sun misc: " + encedeStr1); String decedeStr1 = decodeBySunMisc(encedeStr1); System.out.println("decode by sun misc: " + decedeStr1); String encedeStr2 = encodeByCommonsCode(src); System.out.println("encode by commons-code: " + encedeStr2); String decedeStr2 = decodeByCommonsCode(encedeStr2); System.out.println("decode by commons-code: " + decedeStr2); String encedeStr3 = encodeByXerces(src); System.out.println("encode by xerces: " + encedeStr3); String decodeStr3 = decodeByXerces(encedeStr3); System.out.println("decode by xerces: " + decodeStr3); String encedeStr4 = encodeByJava8(src); System.out.println("encode by java8: " + encedeStr4); String decedeStr4 = decodeByJava8(encedeStr4); System.out.println("decode by java8: " + decedeStr4); }

测试结果如下:

encode by sun misc: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7decode by sun misc: abcdefghijklmnopqrst;encode by commons-code: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7decode by commons-code: abcdefghijklmnopqrst;encode by xerces: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7decode by xerces: abcdefghijklmnopqrst;encode by java8: YWJjZGVmZ2hpamtsbW5vcHFyc3Q7decode by java8: abcdefghijklmnopqrst;

比较一下几种编解码的效率。对每种编码方式使用20+个字符先进行编码,再进行解码,共执行100万次,比较一下总的执行时间。

测试代码如下:

// 测试sun.misc编解码效率 private static void testSunMisc(String src) { long begin = System.currentTimeMillis(); for(int i = 0; i < 1000000; i++) {String encedeStr1 = encodeBySunMisc(src + i);decodeBySunMisc(encedeStr1); } long finish = System.currentTimeMillis(); System.out.println("sun misc consume: " + (finish - begin) + "ms"); } // 测试commons-code编解码效率 private static void testCommonsCode(String src) { long begin = System.currentTimeMillis(); for(int i = 0; i < 1000000; i++) {String encedeStr1 = encodeByCommonsCode(src + i);decodeByCommonsCode(encedeStr1); } long finish = System.currentTimeMillis(); System.out.println("commons-code consume: " + (finish - begin) + "ms"); } // 测试xerces编解码效率 private static void testXerces(String src) {long begin = System.currentTimeMillis();for(int i = 0; i < 1000000; i++) {String encedeStr1 = encodeByXerces(src + i);decodeByXerces(encedeStr1); } long finish = System.currentTimeMillis(); System.out.println("xerces consume: " + (finish - begin) + "ms"); } // 测试Java8编解码效率 private static void testJava8(String src) { long begin = System.currentTimeMillis(); for(int i = 0; i < 1000000; i++) {String encedeStr1 = encodeByJava8(src + i);decodeByJava8(encedeStr1); } long finish = System.currentTimeMillis(); System.out.println("java 8 consume: " + (finish - begin) + "ms"); } public static void main(String[] args) { String src = "abcdefghijklmnopqrst;"; testSunMisc(src); testCommonsCode(src); testXerces(src); testJava8(src); }

总共测试3次,输出结果如下:

commons-code consume: 3337mssun misc consume: 6532msxerces consume: 554msjava 8 consume: 547mscommons-code consume: 3148mssun misc consume: 6445msxerces consume: 498msjava 8 consume: 466mscommons-code consume: 3442mssun misc consume: 6674msxerces consume: 470msjava 8 consume: 512ms

结论

古老的sun.misc方式效率最低,而xerces和Java8方式效率最高。由于Java8的便利性,推荐直接使用Java8中自带的Base64工具进行编解码。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。