package com.hanchao.base64;
import java.io.IOException;
import java.util.Date;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.codec.binary.Base64;
import com.google.gson.Gson;
import com.hanchao.entity.User;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/***********************
 * base64的简单测试
 * @author:han  
 * @version:1.0      
 * @created:2014-3-3  
 ***********************
 */
public class Test1 {
                       
    public static void main(String[] args) throws Exception {
                           
        /**
         * sun BASE64
         */
        //encode...
        String src = "BASE64编码测试";
        BASE64Encoder en = new BASE64Encoder();
        String encodeStr = en.encode(src.getBytes());
        System.out.println("encodeStr:" + encodeStr);
                           
        //decode...
        BASE64Decoder dec = new BASE64Decoder();
        byte[] data = dec.decodeBuffer(encodeStr);
        System.out.println("decodeStr:" + new String(data));
                           
                           
        //封装以后
        String src2 = "{\"retCode\": \"100\",  \"retMessage\": \"接收成功\"}";
        String encodeStr2 = getBASE64(src2);
        System.out.println("encodeStr2 : " + encodeStr2);
                           
        String decodeStr2 = getFromBASE64(encodeStr2);
        System.out.println("decodeStr2 : " + decodeStr2);
                           
                           
        /**
         * apache ... base64...
         */
        //encode...
        String src3 = "BASE64编码测试";
        String encodeStr3 = new String(Base64.encodeBase64(src3.getBytes()));
        System.out.println("encodeStr3 : " + encodeStr3);
                           
        String decodeStr3 = new String(Base64.decodeBase64(encodeStr3));
        System.out.println("decodeStr3 : " + decodeStr3);
                           
        //封装后
        String src4 = "{\"retCode\": \"100\",  \"retMessage\": \"接收成功\"}";
        String encodeStr4 = getBase64(src4);
        System.out.println("encodeStr4:" + encodeStr4);
                           
        String decodeStr4 = getFromBase64(encodeStr4);
        System.out.println("decodeStr4:" + decodeStr4);
                           
        /**
         * 以下是java解析json的小例子
         */
        String json = "{'id':1," +
        "'username':{'tom':'tom','jerry':'jerry'}," +
        "'address':[{'us':'usa','cancada':'canada'},{'chi':'china','aus':'aus'}]}";
        //字符串
        JSONObject jo = JSONObject.fromObject(json);
        System.out.println("1--:" + jo.get("id"));
                           
        //对象
        JSONObject uObject = jo.getJSONObject("username");
        System.out.println("2--username:" + uObject);
        System.out.println("2--username:" + uObject.get("tom"));
        System.out.println("2--username:" + uObject.get("jerry"));
                           
        //数组
        JSONArray addressArray = jo.getJSONArray("address");
        System.out.println("3--:" + addressArray.getJSONObject(0));
        System.out.println("3--:" + addressArray.getJSONObject(0).get("us"));
        System.out.println("3--:" + addressArray.getJSONObject(1).get("chi"));
                           
        /**
         * 转换成json
         */
        User user = new User();
        user.setId(123);
        user.setUsername("hanchao");
        user.setPassword("123456");
        user.setRegDate(new Date());
                           
        String uJson = JSONObject.fromObject(user).toString();
        System.out.println("user转换成json后:" + uJson);
                           
        //使用gson
        Gson gson = new Gson();
        String uJson2 = gson.toJson(user);
        System.out.println("使用gson转换对象为json:" + uJson2);
                           
        //使用gson解析json
        //可以参考下:http://blog.sina.com.cn/s/blog_7ffb8dd501013q9c.html
        //参考下:http://jingyan.baidu.com/article/e8cdb32b619f8437042bad53.html
                           
        /**
         * 将json转换为对象bean
         */
        User userGsonBean = gson.fromJson(uJson2, User.class); //此处如果用uJson就会出现错误
        System.out.println("id:" + userGsonBean.getId() + ", username:" + userGsonBean.getUsername() + ", regdate:" + userGsonBean.getRegDate());
                           
        //使用jsonObject
        User userJSONObjectBean = (User) JSONObject.toBean(JSONObject.fromObject(uJson), User.class);//可以是uJson2
        System.out.println("id:" + userJSONObjectBean.getId() + ", username:" + userJSONObjectBean.getUsername() + ", regdate:" + userJSONObjectBean.getRegDate());
                           
    }
                       
    /**
     * 将s进行BASE64编码
     * *******************
     * @author: han
     * 2014-3-3
     * *******************
     * @param s     要编码的字符串
     * @return
     */
    public static String getBASE64(String s) {
        if(s == null) {
            return null;
        }
        return new BASE64Encoder().encode(s.getBytes());
    }
                       
    /**
     * 将s进行Apache Base64编码
     * *******************
     * @author: han
     * 2014-3-3
     * *******************
     * @param s
     * @return
     */
    public static String getBase64(String s) {
        if(s == null) {
            return null;
        }
        return new String(Base64.encodeBase64(s.getBytes()));
    }
                       
    /**
     * 将BASE64的字符串s进行解码
     * *******************
     * @author: han
     * 2014-3-3
     * *******************
     * @param s
     * @return
     */
    public static String getFromBASE64(String s) {
        if(s == null) {
            return null;
        }
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] b;
        try {
            b = decoder.decodeBuffer(s);
            return new String(b);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
                       
    /**
     * 将apache base64的字符串s进行解码
     * *******************
     * @author: han
     * 2014-3-3
     * *******************
     * @param s
     * @return
     */
    public static String getFromBase64(String s) {
        if(s == null) {
            return null;
        }
        return new String(Base64.decodeBase64(s.getBytes()));
    }
}


如果要涉及字符编码,可以这样:

public static String getFromBase64(String s) {
    if(s == null) {
        return null;
    }
    try {
        return new String(Base64.decodeBase64(s.getBytes()),"GBK");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return s.toString();
    }
}
public static String getBase64(String s) {
    if(s == null) {
        return null;
    }
    try {
        return new String(Base64.encodeBase64(s.getBytes()),"GBK");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return s.toString();
    }
}