首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Base64<3>

2012-08-28 
Base643for (int i 0, j 0 i (data.length() - 4) i + 4, j + 3) {b1 decodingTable[data.c

Base64<3>
for (int i = 0, j = 0; i < (data.length() - 4); i += 4, j += 3) {
                b1 = decodingTable[data.charAt(i)];
                b2 = decodingTable[data.charAt(i + 1)];
                b3 = decodingTable[data.charAt(i + 2)];
                b4 = decodingTable[data.charAt(i + 3)];
                bytes[j] = (byte) ((b1 << 2) | (b2 >> 4));
                bytes[j + 1] = (byte) ((b2 << 4) | (b3 >> 2));
                bytes[j + 2] = (byte) ((b3 << 6) | b4);
            }
            if (data.charAt(data.length() - 2) == '=') {
                b1 = decodingTable[data.charAt(data.length() - 4)];
                b2 = decodingTable[data.charAt(data.length() - 3)];
                bytes[bytes.length - 1] = (byte) ((b1 << 2) | (b2 >> 4));
            } else if (data.charAt(data.length() - 1) == '=') {
                b1 = decodingTable[data.charAt(data.length() - 4)];
                b2 = decodingTable[data.charAt(data.length() - 3)];
                b3 = decodingTable[data.charAt(data.length() - 2)];
                bytes[bytes.length - 2] = (byte) ((b1 << 2) | (b2 >> 4));
                bytes[bytes.length - 1] = (byte) ((b2 << 4) | (b3 >> 2));
            } else {
                b1 = decodingTable[data.charAt(data.length() - 4)];
                b2 = decodingTable[data.charAt(data.length() - 3)];
                b3 = decodingTable[data.charAt(data.length() - 2)];
                b4 = decodingTable[data.charAt(data.length() - 1)];
                bytes[bytes.length - 3] = (byte) ((b1 << 2) | (b2 >> 4));
                bytes[bytes.length - 2] = (byte) ((b2 << 4) | (b3 >> 2));
                bytes[bytes.length - 1] = (byte) ((b3 << 6) | b4);
            }
            return bytes;
        }
        private static byte[] discardNonBase64Bytes(byte[] data) {
            byte[] temp = new byte[data.length];
            int bytesCopied = 0;
            for (int i = 0; i < data.length; i++) {
                if (isValidBase64Byte(data[i])) {
                    temp[bytesCopied++] = data[i];
                }
            }
            byte[] newData = new byte[bytesCopied];
            System.arraycopy(temp, 0, newData, 0, bytesCopied);
            return newData;
        }
        private static String discardNonBase64Chars(String data) {
            StringBuffer sb = new StringBuffer();
            int length = data.length();
            for (int i = 0; i < length; i++) {
                if (isValidBase64Byte((byte) (data.charAt(i)))) {
                    sb.append(data.charAt(i));
                }
            }
            return sb.toString();
        }
        private static boolean isValidBase64Byte(byte b) {
            if (b == '=') {
                return true;
            } else if ((b < 0) || (b >= 128)) {
                return false;
            } else if (decodingTable[b] == -1) {
                return false;
            }
            return true;
        }

热点排行