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

📄 base64.java

📁 openwave公司的用于彩信开发的MM7协议实现java原代码,决对超值.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        return new String( outBuff, 0, e );    }   // end encodeBytes            /**     * Encodes a string in Base64 notation with line breaks     * after every 75 Base64 characters.     *     * @param s the string to encode     * @return the encoded string     * @since 1.3     */    public static String encodeString( String s )    {        return encodeString( s, true );    }   // end encodeString        /**     * Encodes a string in Base64 notation with line breaks     * after every 75 Base64 characters.     *     * @param s the string to encode     * @param breakLines Break lines at 80 characters or less.     * @return the encoded string     * @since 1.3     */    public static String encodeString( String s, boolean breakLines )    {           return encodeBytes( s.getBytes(), breakLines );    }   // end encodeString            /**     * Decodes the first four bytes of array <var>fourBytes</var>     * and returns an array up to three bytes long with the     * decoded values.     *     * @param fourBytes the array with Base64 content     * @return array with decoded values     * @since 1.3     */    private static byte[] decode4to3( byte[] fourBytes )    {        byte[] outBuff1 = new byte[3];        int    count    = decode4to3( fourBytes, 0, outBuff1, 0 );        byte[] outBuff2 = new byte[ count ];                for( int i = 0; i < count; i++ )            outBuff2[i] = outBuff1[i];                return outBuff2;    }                    /**     * Decodes four bytes from array <var>source</var>     * and writes the resulting bytes (up to three of them)     * to <var>destination</var>.     * The source and destination arrays can be manipulated     * anywhere along their length by specifying      * <var>srcOffset</var> and <var>destOffset</var>.     * This method does not check to make sure your arrays     * are large enough to accomodate <var>srcOffset</var> + 4 for     * the <var>source</var> array or <var>destOffset</var> + 3 for     * the <var>destination</var> array.     * This method returns the actual number of bytes that      * were converted from the Base64 encoding.     *      *     * @param source the array to convert     * @param srcOffset the index where conversion begins     * @param destination the array to hold the conversion     * @param destOffset the index where output will be put     * @return the number of decoded bytes converted     * @since 1.3     */    private static int decode4to3( byte[] source, int srcOffset, byte[] destination, int destOffset )    {        // Example: Dk==        if( source[ srcOffset + 2] == EQUALS_SIGN )        {            // Two ways to do the same thing. Don't know which way I like best.            //int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] << 24 ) >>>  6 )            //              | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 );            int outBuff =   ( ( DECODABET[ source[ srcOffset    ] ] & 0xFF ) << 18 )                          | ( ( DECODABET[ source[ srcOffset + 1] ] & 0xFF ) << 12 );                        destination[ destOffset ] = (byte)( outBuff >>> 16 );            return 1;        }                // Example: DkL=        else if( source[ srcOffset + 3 ] == EQUALS_SIGN )        {            // Two ways to do the same thing. Don't know which way I like best.            //int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )            //              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )            //              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 );            int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] & 0xFF ) << 18 )                          | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 )                          | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) <<  6 );                        destination[ destOffset     ] = (byte)( outBuff >>> 16 );            destination[ destOffset + 1 ] = (byte)( outBuff >>>  8 );            return 2;        }                // Example: DkLE        else        {            try{            // Two ways to do the same thing. Don't know which way I like best.            //int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] << 24 ) >>>  6 )            //              | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )            //              | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 )            //              | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 );            int outBuff =   ( ( DECODABET[ source[ srcOffset     ] ] & 0xFF ) << 18 )                          | ( ( DECODABET[ source[ srcOffset + 1 ] ] & 0xFF ) << 12 )                          | ( ( DECODABET[ source[ srcOffset + 2 ] ] & 0xFF ) <<  6)                          | ( ( DECODABET[ source[ srcOffset + 3 ] ] & 0xFF )      );                        destination[ destOffset     ] = (byte)( outBuff >> 16 );            destination[ destOffset + 1 ] = (byte)( outBuff >>  8 );            destination[ destOffset + 2 ] = (byte)( outBuff       );            return 3;            }catch( Exception e){                System.out.println(""+source[srcOffset]+ ": " + ( DECODABET[ source[ srcOffset     ] ]  ) );                System.out.println(""+source[srcOffset+1]+  ": " + ( DECODABET[ source[ srcOffset + 1 ] ]  ) );                System.out.println(""+source[srcOffset+2]+  ": " + ( DECODABET[ source[ srcOffset + 2 ] ]  ) );                System.out.println(""+source[srcOffset+3]+  ": " + ( DECODABET[ source[ srcOffset + 3 ] ]  ) );                return -1;            }   //e nd catch        }    }   // end decodeToBytes                /**     * Decodes data from Base64 notation.     *     * @param s the string to decode     * @return the decoded data     * @since 1.4     */    public static byte[] decode( String s )    {           byte[] bytes = s.getBytes();        return decode( bytes, 0, bytes.length );    }   // end decode            /**     * Decodes data from Base64 notation and     * returns it as a string.     * Equivlaent to calling     * <code>new String( decode( s ) )</code>     *     * @param s the strind to decode     * @return The data as a string     * @since 1.4     */    public static String decodeToString( String s )    {   return new String( decode( s ) );    }   // end decodeToString            /**     * Attempts to decode Base64 data and deserialize a Java     * Object within. Returns <tt>null if there was an error.     *     * @param encodedObject The Base64 data to decode     * @return The decoded and deserialized object     * @since 1.4     */    public static Object decodeToObject( String encodedObject )    {        byte[] objBytes = decode( encodedObject );                java.io.ByteArrayInputStream bais = null;        java.io.ObjectInputStream    ois  = null;                try        {            bais = new java.io.ByteArrayInputStream( objBytes );            ois  = new java.io.ObjectInputStream( bais );                    return ois.readObject();        }   // end try        catch( java.io.IOException e )        {            e.printStackTrace();            return null;        }   // end catch        catch( java.lang.ClassNotFoundException e )        {            e.printStackTrace();            return null;        }   // end catch        finally        {            try{ bais.close(); } catch( Exception e ){}            try{ ois.close();  } catch( Exception e ){}        }   // end finally    }   // end decodeObject            /**     * Decodes Base64 content in byte array format and returns     * the decoded byte array.     *     * @param source The Base64 encoded data     * @param off    The offset of where to begin decoding     * @param len    The length of characters to decode     * @return decoded data     * @since 1.3     */    public static byte[] decode( byte[] source, int off, int len )    {        int    len34   = len * 3 / 4;        byte[] outBuff = new byte[ len34 ]; // Upper limit on size of output        int    outBuffPosn = 0;                byte[] b4        = new byte[4];        int    b4Posn    = 0;        int    i         = 0;        byte   sbiCrop   = 0;        byte   sbiDecode = 0;        for( i = 0; i < len; i++ )        {            sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits            sbiDecode = DECODABET[ sbiCrop ];                        if( sbiDecode >= WHITE_SPACE_ENC ) // White space, Equals sign or better            {                if( sbiDecode >= EQUALS_SIGN_ENC )                {                    b4[ b4Posn++ ] = sbiCrop;                    if( b4Posn > 3 )                    {                        outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn );                        b4Posn = 0;                                                // If that was the equals sign, break out of 'for' loop                        if( sbiCrop == EQUALS_SIGN )                            break;                    }   // end if: quartet built                                    }   // end if: equals sign or better                            }   // end if: white space, equals sign or better            else            {                System.err.println( "Bad Base64 input character at " + i + ": " + source[i] + "(decimal)" );                return null;            }   // end else:         }   // each input character                                           byte[] out = new byte[ outBuffPosn ];        System.arraycopy( outBuff, 0, out, 0, outBuffPosn );         return out;    }   // end decode                    /* ********  I N N E R   C L A S S   I N P U T S T R E A M  ******** */                /**     * A {@link Base64.InputStream} will read data from another     * {@link java.io.InputStream}, given in the constructor,     * and encode/decode to/from Base64 notation on the fly.     *     * @see Base64     * @see java.io.FilterInputStream     * @since 1.3     */    public static class InputStream extends java.io.FilterInputStream    {        private boolean encode;         // Encoding or decoding        private int     position;       // Current position in the buffer        private byte[]  buffer;         // Small buffer holding converted data        private int     bufferLength;   // Length of buffer (3 or 4)        private int     numSigBytes;    // Number of meaningful bytes in the buffer        private int     lineLength;        private boolean breakLines;     // Break lines at less than 80 characters                        /**         * Constructs a {@link Base64.InputStream} in DECODE mode.         *         * @param in the {@link java.io.InputStream} from which to read data.         * @since 1.3         */        public InputStream( java.io.InputStream in )        {               this( in, Base64.DECODE );        }   // end constructor                        /**         * Constructs a {@link Base64.InputStream} in         * either ENCODE or DECODE mode.         *         * @param in the {@link java.io.InputStream} from which to read data.         * @param encode Conversion direction         * @see Base64#ENCODE         * @see Base64#DECODE         * @since 1.3         */        public InputStream( java.io.InputStream in, boolean encode )        {            this( in, encode, true );        }   // end constructor                        /**         * Constructs a {@link Base64.InputStream} in         * either ENCODE or DECODE mode.         *         * @param in the {@link java.io.InputStream} from which to read data.         * @param encode Conversion direction         * @param breakLines Break lines at less than 80 characters.         * @see Base64#ENCODE         * @see Base64#DECODE         * @since 1.3         */        public InputStream( java.io.InputStream in, boolean encode, boolean breakLines )        {               super( in );            this.breakLines = breakLines;            this.encode = encode;            this.bufferLength = encode ? 4 : 3;            this.buffer   = new byte[ bufferLength ];            this.position = -1;            this.lineLength = 0;        }   // end constructor                /**         * Reads enough of the input stream to convert         * to/from Base64 and returns the next byte.         *         * @return next byte         * @since 1.3         */        public int read() throws java.io.IOException 

⌨️ 快捷键说明

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