Java 中如何使用base64编码呢?
有如下三种方式:
方式一:commons-codec.jar
- String base64String = "whuang123";
- byte[] result = Base64.encodeBase64(base64String.getBytes());
方式二:使用sun.misc.BASE64Encoder
- /**
- * 编码
- *
- * @param bstr
- * @return String
- */
- public static String encode(byte[] bstr) {
- return new sun.misc.BASE64Encoder().encode(bstr);
- }
- /**
- * 解码
- *
- * @param str
- * @return string
- */
- public static byte[] decode(String str) {
- byte[] bt = null;
- try {
- sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
- bt = decoder.decodeBuffer(str);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return bt;
- }
方式三:使用com.sun.org.apache.xerces.internal.impl.dv.util.Base64
- /***
- * encode by Base64
- */
- public static String encodeBase64(byte[] input) throws Exception {
- Class clazz = Class
- .forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
- Method mainMethod = clazz.getMethod("encode", byte[].class);
- mainMethod.setAccessible(true);
- Object retObj = mainMethod.invoke(null, new Object[] { input });
- return (String) retObj;
- }
- /***
- * decode by Base64
- */
- public static byte[] decodeBase64(String input) throws Exception {
- Class clazz = Class
- .forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64");
- Method mainMethod = clazz.getMethod("decode", String.class);
- mainMethod.setAccessible(true);
- Object retObj = mainMethod.invoke(null, input);
- return (byte[]) retObj;
- }
测试:
- package com.jn.base64;
- import junit.framework.Assert;
- import org.apache.commons.codec.binary.Base64;
- import com.common.util.SystemUtil;
- public class BaseTest {
- public static void main(String[] args) throws Exception {
- String base64String = "whuang123";
- byte[] result = Base64.encodeBase64(base64String.getBytes());
- SystemUtil.printBytes(result);
- byte[] result2 = SystemUtil.encode(base64String.getBytes()).getBytes();
- System.out.println("result2:"+result2);
- byte[] result3 = SystemUtil.encodeBase64(base64String.getBytes()).getBytes();
- boolean isSuccess = SystemUtil.isSame(result, result2);
- Assert.assertEquals(true, isSuccess);
- SystemUtil.printBytes(result2);
- SystemUtil.printBytes(result3);
- System.out.println(isSuccess);
- }
- }
运行结果如下: