打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Base64Util 编码 - 适用于 JavaMe
package com.aicaipiao.client.common;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Vector;

/**
 * Base64 编码处理的辅助类
 *
 */
public class Base64Util {
    
    private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
            .toCharArray();
    
    private static Vector nodes = new Vector();
    
    /**
     * Split string into multiple strings
     *
     * @param original
     *            Original string
     * @param separator
     *            Separator string in original string
     * @return Splitted string array
     */
    public static String[] split(String original, String separator) {
        nodes.removeAllElements();
        // Parse nodes into vector
        int index = original.indexOf(separator);
        while (index >= 0) {
            nodes.addElement(original.substring(0, index));
            original = original.substring(index + separator.length());
            index = original.indexOf(separator);
        }
        // Get the last node
        nodes.addElement(original);
        
        // Create splitted string array
        String[] result = new String[nodes.size()];
        if (nodes.size() > 0) {
            for (int loop = 0; loop < nodes.size(); loop++)
                result[loop] = (String) nodes.elementAt(loop);
        }
        return result;
    }
    
    /*
     * Replace all instances of a String in a String. @param s String to alter.
     * @param f String to look for. @param r String to replace it with, or null
     * to just remove it.
     */
    public static String replace(String s, String f, String r) {
        if (s == null)
            return s;
        if (f == null)
            return s;
        if (r == null)
            r = "";
        
        int index01 = s.indexOf(f);
        while (index01 != -1) {
            s = s.substring(0, index01) + r + s.substring(index01 + f.length());
            index01 += r.length();
            index01 = s.indexOf(f, index01);
        }
        return s;
    }
    
    /**
     * Method removes HTML tags from given string.
     *
     * @param text
     *            Input parameter containing HTML tags (eg. <b>cat</b>)
     * @return String without HTML tags (eg. cat)
     */
    public static String removeHtml(String text) {
        try {
            int idx = text.indexOf("<");
            if (idx == -1)
                return text;
            String plainText = "";
            String htmlText = text;
            int htmlStartIndex = htmlText.indexOf("<", 0);
            if (htmlStartIndex == -1) {
                return text;
            }
            while (htmlStartIndex >= 0) {
                plainText += htmlText.substring(0, htmlStartIndex);
                int htmlEndIndex = htmlText.indexOf(">", htmlStartIndex);
                htmlText = htmlText.substring(htmlEndIndex + 1);
                htmlStartIndex = htmlText.indexOf("<", 0);
            }
            plainText = plainText.trim();
            return plainText;
        } catch (Exception e) {
            System.err.println("Error while removing HTML: " + e.toString());
            return text;
        }
    }
    public static String encode(String data) {
     return encode(data.getBytes());
    }
    
    /** Base64 encode the given data */
    public static String encode(byte[] data) {
        int start = 0;
        int len = data.length;
        StringBuffer buf = new StringBuffer(data.length * 3 / 2);
        
        int end = len - 3;
        int i = start;
        int n = 0;
        
        while (i <= end) {
            int d = ((((int) data[i]) & 0x0ff) << 16)
            | ((((int) data[i + 1]) & 0x0ff) << 8)
            | (((int) data[i + 2]) & 0x0ff);
            
            buf.append(legalChars[(d >> 18) & 63]);
            buf.append(legalChars[(d >> 12) & 63]);
            buf.append(legalChars[(d >> 6) & 63]);
            buf.append(legalChars[d & 63]);
            
            i += 3;
            
            if (n++ >= 14) {
                n = 0;
//                buf.append(" ");
            }
        }
        
        if (i == start + len - 2) {
            int d = ((((int) data[i]) & 0x0ff) << 16)
            | ((((int) data[i + 1]) & 255) << 8);
            
            buf.append(legalChars[(d >> 18) & 63]);
            buf.append(legalChars[(d >> 12) & 63]);
            buf.append(legalChars[(d >> 6) & 63]);
            buf.append("=");
        } else if (i == start + len - 1) {
            int d = (((int) data[i]) & 0x0ff) << 16;
            
            buf.append(legalChars[(d >> 18) & 63]);
            buf.append(legalChars[(d >> 12) & 63]);
            buf.append("==");
        }
        
        return buf.toString();
    }
    
    private static int decode(char c) {
        if (c >= 'A' && c <= 'Z')
            return ((int) c) - 65;
        else if (c >= 'a' && c <= 'z')
            return ((int) c) - 97 + 26;
        else if (c >= '0' && c <= '9')
            return ((int) c) - 48 + 26 + 26;
        else
            switch (c) {
                case '+':
                    return 62;
                case '/':
                    return 63;
                case '=':
                    return 0;
                default:
                    throw new RuntimeException("unexpected code: " + c);
            }
    }
    
    /**
     * Decodes the given Base64 encoded String to a new byte array. The byte
     * array holding the decoded data is returned.
     */
    
    public static byte[] decode(String s) {
        
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            decode(s, bos);
        } catch (IOException e) {
            throw new RuntimeException();
        }
        byte[] decodedBytes = bos.toByteArray();
        try {
            bos.close();
            bos = null;
        } catch (IOException ex) {
            System.err.println("Error while decoding BASE64: " + ex.toString());
        }
        return decodedBytes;
    }
    
    private static void decode(String s, OutputStream os) throws IOException {
        int i = 0;
        
        int len = s.length();
        
        while (true) {
            while (i < len && s.charAt(i) <= ' ')
                i++;
            
            if (i == len)
                break;
            
            int tri = (decode(s.charAt(i)) << 18)
            + (decode(s.charAt(i + 1)) << 12)
            + (decode(s.charAt(i + 2)) << 6)
            + (decode(s.charAt(i + 3)));
            
            os.write((tri >> 16) & 255);
            if (s.charAt(i + 2) == '=')
                break;
            os.write((tri >> 8) & 255);
            if (s.charAt(i + 3) == '=')
                break;
            os.write(tri & 255);
            
            i += 4;
        }
    }
    /**
     * MDEsMDIsMDMsMDQsMDUsMDZ8MDEsMDIsMDMsMDQsMDUsMDY= [提交的]
     * MDEsMDIsMDMsMDQsMDUsMDZ8MDE= [真实的]
     * 
     * 08,12,14,16,22,25|16^08,12,14,16,22,25|16^08,12,14,16,22,25|16^08,12,14,16,22,25|16^08,12,14,16,22,25|04
     * @param args
     */
    public static void main(String[] args) throws Exception {
     System.out.println(Base64Util.encode("广东省"));
     System.out.println(Base64Util.encode("深圳市"));
     System.out.println(Base64Util.encode("广东深圳白石洲"));
     System.out.println(new String(Base64Util.decode("5bm/5Lic5rex5Zyz")));
     System.out.println(new String(Base64Util.decode("5bm/5Lic55yB"), "utf8"));
     System.out.println(Base64Util.encode("01,02,03,04,05,06|01"));
     System.out.println(Base64Util.encode("01,02,03,04,05,06,07,08|06,15"));
     String content = "08,12,14,16,22,25|16^08,12,14,16,22,25|16^08,12,14,16,22,25|16^08,12,14,16,22,25|16^08,12,14,16,22,25|04";
     System.out.println(Base64Util.encode(content));
    
     String s = "MDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIsMTQsMTYsMjIsMjV8MDQ=";
//     System.out.println("");
     System.out.println(s);
    
     byte[] data = Base64Util.decode("MDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgs MTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIsMTQsMTYsMjIsMjV8MTZeMDgsMTIs MTQsMTYsMjIsMjV8MDQ=");
     String de = new String(data);
     System.out.println(de);
    
     System.out.println(new String(Base64Util.decode("MDUsMTEsMTYsMTcsMjYsMzN8MDMsMDU=")));
}
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android、iPhone和Java三个平台一致的加密工具
一个给代码作高亮度彩色处理的类
JAVA ip地址与Long值相互转换
SpringMVC+Apache Shiro+JPA(hibernate)案例教学(三)给Shiro登录验证加上验证码
关于JSP静态化与伪静态的简单做法
一个通用的字符串检测方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服