java base64编码的三种方式

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.      *  
  14.      * @param str 
  15.      * @return string 
  16.      */  
  17.      public static byte[] decode(String str) {  
  18.      byte[] bt = null;  
  19.      try {  
  20.      sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();  
  21.      bt = decoder.decodeBuffer(str);  
  22.      } catch (IOException e) {  
  23.      e.printStackTrace();  
  24.      }  
  25.       
  26.      return bt;  
  27.      }  

 

 

方式三:使用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.     /*** 
  14.      * decode by Base64 
  15.      */  
  16.     public static byte[] decodeBase64(String input) throws Exception {  
  17.         Class clazz = Class  
  18.                 .forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");  
  19.         Method mainMethod = clazz.getMethod("decode", String.class);  
  20.         mainMethod.setAccessible(true);  
  21.         Object retObj = mainMethod.invoke(null, input);  
  22.         return (byte[]) retObj;  
  23.     }  

 

测试:

Java代码  

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

 运行结果如下:

 

时间: 2024-12-18 00:09:01

java base64编码的三种方式的相关文章

详解Java实现多线程的三种方式_java

本文实例为大家分享了Java实现多线程的三种方式,供大家参考,具体内容如下 import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main { public static void main(String[] args) { //方法一:继承Thread int i = 0; // for(; i < 100; i++){ // System.out.println(T

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

详细解读JAVA多线程实现的三种方式_java

最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法是一个native方法,它将启动一个新线程,并执行run()方法.这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run(

JAVA多线程实现的三种方式

JAVA多线程实现 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的. 前两种大家应该都熟悉,第三种不太常用,但有时面试时会问到所以我在这里写下. 继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实

Java遍历集合的三种方式_java

对于遍历集合获取其对象,在这里总结的三种简单的方式 方式一 : 将集合变为数组,后遍历数组 Object[] obj = list.toArray(); for(Object s : obj){ System.out.println((String) s); } 方式二 :  get()方法获取 . 但只能在list集合中使用, 只有List集合才有索引值. for(int i = 0;i<list.size();i++){ System.out.println(list.get(i)); }

实现 Java 平台的三种方式

广泛地说,只要能执行 Java bytecode 者,就可以称为 Java 平台(Java platform).大致上,实现 Java 平台的方式有三种,分别是: Java 虚拟机器(Java Virtual Machine,JVM) Java 操作系统(Java Operating System) Java 芯片(Java Chip) 以下就此三种 Java 平台提出解说,并比较之. Java 虚拟机器 所谓的 Java 虚拟机器,指的是在操作系统上执行的一种程序,此程序可以解读 Java b

实现Java平台的三种方式详细解析

广泛地说,只要能执行 Java bytecode 者,就可以称为 Java 平台(Java platform).大致上,实现 Java 平台的方式有三种,分别是: Java 虚拟机器(Java Virtual Machine,JVM) Java 操作系统(Java Operating System) Java 芯片(Java Chip) 以下就此三种 Java 平台提出解说,并比较之. Java 虚拟机器 所谓的 Java 虚拟机器,指的是在操作系统上执行的一种程序,此程序可以解读 Java b

java base64编码和解码

Java 中使用base64编码和解码:   第一种方式: 通过反射使用java 中不对外公开的类: Java代码   /***       * encode by Base64       */       public static String encodeBase64(byte[]input) throws Exception{           Class clazz=Class.forName("com.sun.org.apache.xerces.internal.impl.dv.

使用Net.Mail、CDO组件、JMail组件三种方式发送邮件

原文:使用Net.Mail.CDO组件.JMail组件三种方式发送邮件 一.使用Net.Mail          需要服务器认证,大部分服务器端口为25. View Code 1 /// <summary> 2 /// 用MailMessage通过需要认证的SMTP服务器发送邮件,可以发送附件 3 /// </summary> 4 /// <param name="frmAddress">发件箱地址,例:myaccount@163.com</