⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base64.java

📁 一个比较好的jsf spring hibernate的例子
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        int lengthDataBits = binaryData.length * EIGHTBIT;        int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;        int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;        byte encodedData[] = null;        if (fewerThan24bits != 0) //data not divisible by 24 bit        {            encodedData = new byte[(numberTriplets + 1) * 4];        } else // 16 or 8 bit        {            encodedData = new byte[numberTriplets * 4];        }        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;        int encodedIndex = 0;        int dataIndex = 0;        int i = 0;        for (i = 0; i < numberTriplets; i++) {            dataIndex = i * 3;            b1 = binaryData[dataIndex];            b2 = binaryData[dataIndex + 1];            b3 = binaryData[dataIndex + 2];            l = (byte) (b2 & 0x0f);            k = (byte) (b1 & 0x03);            encodedIndex = i * 4;            byte val1 = ((b1 & SIGN) == 0) ?                        (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);            byte val2 = ((b2 & SIGN) == 0) ?                        (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);            byte val3 = ((b3 & SIGN) == 0) ?                        (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc);            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];            encodedData[encodedIndex + 1] =                  lookUpBase64Alphabet[val2 | (k << 4)];            encodedData[encodedIndex + 2] =                  lookUpBase64Alphabet[(l << 2) | val3];            encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f];        }        // form integral number of 6-bit groups        dataIndex = i * 3;        encodedIndex = i * 4;        if (fewerThan24bits == EIGHTBIT) {            b1 = binaryData[dataIndex];            k = (byte) (b1 & 0x03);            byte val1 = ((b1 & SIGN) == 0) ?                        (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4];            encodedData[encodedIndex + 2] = PAD;            encodedData[encodedIndex + 3] = PAD;        } else if (fewerThan24bits == SIXTEENBIT) {            b1 = binaryData[dataIndex];            b2 = binaryData[dataIndex + 1];            l = (byte) (b2 & 0x0f);            k = (byte) (b1 & 0x03);            byte val1 = ((b1 & SIGN) == 0) ?                        (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0);            byte val2 = ((b2 & SIGN) == 0) ?                        (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0);            encodedData[encodedIndex] = lookUpBase64Alphabet[val1];            encodedData[encodedIndex + 1] =                  lookUpBase64Alphabet[val2 | (k << 4)];            encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2];            encodedData[encodedIndex + 3] = PAD;        }        return encodedData;    }    /**     * Returns the base64 encoding of String.  First the String is     * converted to byte[], using the character encoding of     * <code>ISO-8859-1</code>.     *     * @@param data String of data to convert     * @@return Base64-encoded String     */    public static String encode(String data) {        try {            return encode(data, DEFAULT_CHAR_ENCODING);        } catch (UnsupportedEncodingException uee) {            throw new IllegalStateException(uee.toString());        }    }    /**     * Returns the base64 encoding of String (by first converting to     * byte[], using the specified <code>charEncoding</code>).  The     * return value is also a String.  The Default     * <code>codeEncoding</chode> is <code>ISO-8859-1</code>.     *     * @@param data String of data to convert     * @@param charEncoding the character encoding to use when converting     * a String to a byte[]     * @@return Base64-encoded String     */    public static String encode(String data, String charEncoding)          throws UnsupportedEncodingException {        // Check arguments        if (data == null) {            data = "";        }        if (charEncoding == null) {            charEncoding = DEFAULT_CHAR_ENCODING;        }        // Convert to byte[]        ByteArrayOutputStream bos = new ByteArrayOutputStream();        OutputStreamWriter osw = new OutputStreamWriter(bos, charEncoding);        try {            osw.write(data);        } catch (IOException ioe) {            throw new RuntimeException(ioe.toString());        }        // Encode        byte[] encodedData = encode(bos.toByteArray());        // Convert to String        if (encodedData == null) {            return "";        }        bos = new ByteArrayOutputStream(encodedData.length);        try {            bos.write(encodedData);        } catch (IOException ioe) {            throw new RuntimeException(ioe.toString());        }        return bos.toString(charEncoding);    }    /**     * Decodes Base64 data into octects     *     * @@param binaryData Byte array containing Base64 data     * @@return Array containing decoded data.     */    public static byte[] decode(byte[] base64Data) {        // Should we throw away anything not in base64Data ?        // handle the edge case, so we don't have to worry about it later        if (base64Data.length == 0) {            return EMPTY_BYTE_ARRAY;        }        int numberQuadruple = base64Data.length / FOURBYTE;        byte decodedData[] = null;        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0;        int encodedIndex = 0;        int dataIndex = 0;        {            // this block sizes the output array properly - rlw            int lastData = base64Data.length;            // ignore the '=' padding            while (base64Data[lastData - 1] == PAD) {                if (--lastData == 0) {                    return EMPTY_BYTE_ARRAY;                }            }            decodedData = new byte[lastData - numberQuadruple];        }        for (int i = 0; i < numberQuadruple; i++) {            dataIndex = i * 4;            marker0 = base64Data[dataIndex + 2];            marker1 = base64Data[dataIndex + 3];            b1 = base64Alphabet[base64Data[dataIndex]];            b2 = base64Alphabet[base64Data[dataIndex + 1]];            if (marker0 != PAD && marker1 != PAD) {                //No PAD e.g 3cQl                b3 = base64Alphabet[marker0];                b4 = base64Alphabet[marker1];                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);                decodedData[encodedIndex + 1] =                      (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));                decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4);            } else if (marker0 == PAD) {                //Two PAD e.g. 3c[Pad][Pad]                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);            } else if (marker1 == PAD) {                //One PAD e.g. 3cQ[Pad]                b3 = base64Alphabet[marker0];                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);                decodedData[encodedIndex + 1] =                      (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));            }            encodedIndex += 3;        }        return decodedData;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -