public class Base64Encoder {
    private static final char last2byte = (char) Integer  
            .parseInt("00000011", 2);  
    private static final char last4byte = (char) Integer  
            .parseInt("00001111", 2);  
    private static final char last6byte = (char) Integer  
            .parseInt("00111111", 2);  
    private static final char lead6byte = (char) Integer  
            .parseInt("11111100", 2);  
    private static final char lead4byte = (char) Integer  
            .parseInt("11110000", 2);  
    private static final char lead2byte = (char) Integer  
            .parseInt("11000000", 2);  
    private static final char[] encodeTable = new char[] { 'A', 'B', 'C', 'D',  
            'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',  
            'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',  
            'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',  
            'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',  
            '4', '5', '6', '7', '8', '9', '+', '/' };  
 
    /**
     * Base64 encoding.
     *  
     * @param from
     *            The src data.
     * @return
     */  
    public static String encode(byte[] from) {  
        StringBuffer to = new StringBuffer((int) (from.length * 1.34) + 3);  
        int num = 0;  
        char currentByte = 0;  
        for (int i = 0; i < from.length; i++) {  
            num = num % 8;  
            while (num < 8) {  
                switch (num) {  
                case 0:  
                    currentByte = (char) (from[i] & lead6byte);  
                    currentByte = (char) (currentByte >>> 2);  
                    break;  
                case 2:  
                    currentByte = (char) (from[i] & last6byte);  
                    break;  
                case 4:  
                    currentByte = (char) (from[i] & last4byte);  
                    currentByte = (char) (currentByte << 2);  
                    if ((i + 1) < from.length) {  
                        currentByte |= (from[i + 1] & lead2byte) >>> 6;  
                    }  
                    break;  
                case 6:  
                    currentByte = (char) (from[i] & last2byte);  
                    currentByte = (char) (currentByte << 4);  
                    if ((i + 1) < from.length) {  
                        currentByte |= (from[i + 1] & lead4byte) >>> 4;  
                    }  
                    break;  
                }  
                to.append(encodeTable[currentByte]);  
                num += 6;  
            }  
        }  
        if (to.length() % 4 != 0) {  
            for (int i = 4 - to.length() % 4; i > 0; i--) {  
                to.append("=");  
            }  
        }  
        return to.toString();  
    }
}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. android之shape使用
  2. Android名称、版本和API level的对应关系
  3. Android中的Toast提示
  4. android sqlite 实例
  5. Android中ListView的优化问题
  6. Android(安卓)XMPP实现IM 群聊功能
  7. android,bindService实例
  8. android绘制折线图
  9. Android(安卓)studio(AS) svg图片使用
  10. Android(安卓)TextView 支持的HTML标签