Java 中如何使用base64编码呢?

有如下三种方式:

方式一:commons-codec.jar

Java代码  
  1. String base64String = "whuang123";
  2. byte[] result = Base64.encodeBase64(base64String.getBytes());

方式二:使用sun.misc.BASE64Encoder

Java代码  
  1. /**
  2. * 编码
  3. *
  4. * @param bstr
  5. * @return String
  6. */
  7. public static String encode(byte[] bstr) {
  8. return new sun.misc.BASE64Encoder().encode(bstr);
  9. }
  10. /**
  11. * 解码
  12. *
  13. * @param str
  14. * @return string
  15. */
  16. public static byte[] decode(String str) {
  17. byte[] bt = null;
  18. try {
  19. sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
  20. bt = decoder.decodeBuffer(str);
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. return bt;
  25. }

方式三:使用com.sun.org.apache.xerces.internal.impl.dv.util.Base64

Java代码  
  1. /***
  2. * encode by Base64
  3. */
  4. public static String encodeBase64(byte[] input) throws Exception {
  5. Class clazz = Class
  6. .forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
  7. Method mainMethod = clazz.getMethod("encode", byte[].class);
  8. mainMethod.setAccessible(true);
  9. Object retObj = mainMethod.invoke(null, new Object[] { input });
  10. return (String) retObj;
  11. }
  12. /***
  13. * decode by Base64
  14. */
  15. public static byte[] decodeBase64(String input) throws Exception {
  16. Class clazz = Class
  17. .forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
  18. Method mainMethod = clazz.getMethod("decode", String.class);
  19. mainMethod.setAccessible(true);
  20. Object retObj = mainMethod.invoke(null, input);
  21. return (byte[]) retObj;
  22. }

测试:

Java代码  
  1. package com.jn.base64;
  2. import junit.framework.Assert;
  3. import org.apache.commons.codec.binary.Base64;
  4. import com.common.util.SystemUtil;
  5. public class BaseTest {
  6. public static void main(String[] args) throws Exception {
  7. String base64String = "whuang123";
  8. byte[] result = Base64.encodeBase64(base64String.getBytes());
  9. SystemUtil.printBytes(result);
  10. byte[] result2 = SystemUtil.encode(base64String.getBytes()).getBytes();
  11. System.out.println("result2:"+result2);
  12. byte[] result3 = SystemUtil.encodeBase64(base64String.getBytes()).getBytes();
  13. boolean isSuccess = SystemUtil.isSame(result, result2);
  14. Assert.assertEquals(true, isSuccess);
  15. SystemUtil.printBytes(result2);
  16. SystemUtil.printBytes(result3);
  17. System.out.println(isSuccess);
  18. }
  19. }

运行结果如下:

java base64编码的三种方式相关推荐

  1. base64编码的三种方式、各方式性能比较

    转载链接:java 实现base64编码的三种方式.各方式性能比较.最后给出最优工具类 小白实操记录 转载内容: 简单介绍了base64编码,给出三种实现方式性能比较,可直接使用最后提供的工具类,性能 ...

  2. response设置编码的三种方式以及比较

    https://blog.csdn.net/u010653908/article/details/53994021 response设置编码的三种方式以及比较 2017年01月03日 14:12:46 ...

  3. JAVA实现多线程的三种方式

    在Java中可通过三种方式来实现多线程: 1.继承Thread类,重写run( )方法 2.实现Runnable接口,重写run( )方法 3.实现Callable接口,重写call( )方法并使用F ...

  4. Java实现数据共享的三种方式

    Java实现数据共享的三种方式 目录 文章目录 1.类的静态变量 2.类内声明共享数据类型的引用 3.内部类 ***后记*** : 内容 1.类的静态变量 示例:老师和学生共用一间教室 Classro ...

  5. java获取时间戳的三种方式比较

    文章目录 java获取时间戳的三种方式比较 java获取时间戳的三种方式比较 import java.util.Calendar; import java.util.Date; //不再推荐使用Dat ...

  6. Java数组定义的三种方式

    Java数组定义的三种方式 第一种:先声明,分配空间,赋值 int[] arr; //先声明arr=new int[10]; //分配空间fo0(int i=0;i<10;i++){arr[i] ...

  7. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  8. Java创建线程的三种方式,以前只知道两种,现在添加一种Callable与FutureTask创建的方式

    一共有以下三种方式: 1.继承Thread 2.实现Runnable 3.实现Callable,并FutureTask包装 线程启动方式均是使用start()方法 先阐述优缺点: 1和2,3: 2,3 ...

  9. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

最新文章

  1. linux u8 头文件,2019-12-11 转载TCP/IP编程常用C语言头文件
  2. 服务器维修一天,魔兽世界怀旧服一天增加16个服务器,维护四次,这才是明智选择...
  3. Android中使用am命令实现在命令行启动程序详解
  4. 因让员工加班 去哪儿网被处罚3250元!网友:是不是少了个“万”?
  5. base32解码工具_[随波逐流]CTF编码工具 V1.0
  6. Linux上快速安装软RAID详细步骤
  7. Android 微信人脸识别+微信二维码
  8. 马克思主义基本原理概论第一章笔记
  9. 如何在Windows 10上修复缩略图问题
  10. 照片制作手机壳,定制手机壳diy需要什么设备?
  11. Warning One or more files are in a conflicted state.
  12. access筛选末位数字为1或5_数字鸿沟理论不会用?北大必考常考,我们以快手短视频为例...
  13. CF869E The Untended Antiquity(二维数状数组+差分+hash)
  14. 漫谈递归——递归需要满足的两个条件
  15. 【GoLang】Map的遍历
  16. idea 配置web项目图片无法显示问题
  17. 瞎想-电信IPTV如何做到真高清真4K直播
  18. 西门子PLC1200学习之PID总结
  19. 字符串转码中文乱码问题的进一步理解 UTF-8 GBK转码
  20. Android 软件升级

热门文章

  1. 关于go访问rabbitmq的连接池
  2. Centos7允许3306端口通过防火墙
  3. thinkphp关联查询(多表查询)
  4. 用计算机演银河系,专家首次用计算机模拟类银河星系 分辨率极高
  5. JVM优化系列-Java对象引用与可触及强度
  6. redis有序集合sorted set详解
  7. : Attribute xmlns was already specified for element web-app.
  8. ​同样更新分支,git merge 和 rebase 有什么区别?
  9. brew 安装php56,homebrew安装php5.6后的信息
  10. 美团(Leaf)分布式ID算法