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

📄 base64.java

📁 pastry的java实现的2.0b版
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
     * @return The Base64-encoded object     * @since 1.4     */    public static String encodeObject( java.io.Serializable serializableObject )    {        return encodeObject( serializableObject, NO_OPTIONS );    }   // end encodeObject        /**     * Serializes an object and returns the Base64-encoded     * version of that serialized object. If the object     * cannot be serialized or there is another error,     * the method will return <tt>null</tt>.     * <p>     * Valid options:<pre>     *   GZIP: gzip-compresses object before encoding it.     *   DONT_BREAK_LINES: don't break lines at 76 characters     *     <i>Note: Technically, this makes your encoding non-compliant.</i>     * </pre>     * <p>     * Example: <code>encodeObject( myObj, Base64.GZIP )</code> or     * <p>     * Example: <code>encodeObject( myObj, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>     *     * @param serializableObject The object to encode     * @options Specified options     * @return The Base64-encoded object     * @see Base64#GZIP     * @see Base64#DONT_BREAK_LINES     * @since 2.0     */    public static String encodeObject( java.io.Serializable serializableObject, int options )    {        // Streams        java.io.ByteArrayOutputStream  baos  = null;         java.io.OutputStream           b64os = null;         java.io.ObjectOutputStream     oos   = null;         java.util.zip.GZIPOutputStream gzos  = null;                // Isolate options        int gzip           = (options & GZIP);        int dontBreakLines = (options & DONT_BREAK_LINES);                try        {            // ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream            baos  = new java.io.ByteArrayOutputStream();            b64os = new Base64.OutputStream( baos, ENCODE | dontBreakLines );                // GZip?            if( gzip == GZIP )            {                gzos = new java.util.zip.GZIPOutputStream( b64os );                oos  = new java.io.ObjectOutputStream( gzos );            }   // end if: gzip            else                oos   = new java.io.ObjectOutputStream( b64os );                        oos.writeObject( serializableObject );        }   // end try        catch( java.io.IOException e )        {            e.printStackTrace();            return null;        }   // end catch        finally        {            try{ oos.close();   } catch( Exception e ){}            try{ gzos.close();  } catch( Exception e ){}            try{ b64os.close(); } catch( Exception e ){}            try{ baos.close();  } catch( Exception e ){}        }   // end finally                // Return value according to relevant encoding.        try         {            return new String( baos.toByteArray(), PREFERRED_ENCODING );        }   // end try        catch (java.io.UnsupportedEncodingException uue)        {            return new String( baos.toByteArray() );        }   // end catch            }   // end encode            /**     * Encodes a byte array into Base64 notation.     * Does not GZip-compress data.     *     * @param source The data to convert     * @since 1.4     */    public static String encodeBytes( byte[] source )    {        return encodeBytes( source, 0, source.length, NO_OPTIONS );    }   // end encodeBytes        /**     * Encodes a byte array into Base64 notation.     * <p>     * Valid options:<pre>     *   GZIP: gzip-compresses object before encoding it.     *   DONT_BREAK_LINES: don't break lines at 76 characters     *     <i>Note: Technically, this makes your encoding non-compliant.</i>     * </pre>     * <p>     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or     * <p>     * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>     *     *     * @param source The data to convert     * @param options Specified options     * @see Base64#GZIP     * @see Base64#DONT_BREAK_LINES     * @since 2.0     */    public static String encodeBytes( byte[] source, int options )    {           return encodeBytes( source, 0, source.length, options );    }   // end encodeBytes            /**     * Encodes a byte array into Base64 notation.     * Does not GZip-compress data.     *     * @param source The data to convert     * @param off Offset in array where conversion should begin     * @param len Length of data to convert     * @since 1.4     */    public static String encodeBytes( byte[] source, int off, int len )    {        return encodeBytes( source, off, len, NO_OPTIONS );    }   // end encodeBytes            /**     * Encodes a byte array into Base64 notation.     * <p>     * Valid options:<pre>     *   GZIP: gzip-compresses object before encoding it.     *   DONT_BREAK_LINES: don't break lines at 76 characters     *     <i>Note: Technically, this makes your encoding non-compliant.</i>     * </pre>     * <p>     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or     * <p>     * Example: <code>encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>     *     *     * @param source The data to convert     * @param off Offset in array where conversion should begin     * @param len Length of data to convert     * @param breakLines Break lines at 80 characters or less.     * @param options Specified options     * @see Base64#GZIP     * @see Base64#DONT_BREAK_LINES     * @since 2.0     */    public static String encodeBytes( byte[] source, int off, int len, int options )    {        // Isolate options        int dontBreakLines = ( options & DONT_BREAK_LINES );        int gzip           = ( options & GZIP   );                // Compress?        if( gzip == GZIP )        {            java.io.ByteArrayOutputStream  baos  = null;            java.util.zip.GZIPOutputStream gzos  = null;            Base64.OutputStream            b64os = null;                            try            {                // GZip -> Base64 -> ByteArray                baos = new java.io.ByteArrayOutputStream();                b64os = new Base64.OutputStream( baos, ENCODE | dontBreakLines );                gzos  = new java.util.zip.GZIPOutputStream( b64os );                             gzos.write( source, off, len );                gzos.close();            }   // end try            catch( java.io.IOException e )            {                e.printStackTrace();                return null;            }   // end catch            finally            {                try{ gzos.close();  } catch( Exception e ){}                try{ b64os.close(); } catch( Exception e ){}                try{ baos.close();  } catch( Exception e ){}            }   // end finally            // Return value according to relevant encoding.            try            {                return new String( baos.toByteArray(), PREFERRED_ENCODING );            }   // end try            catch (java.io.UnsupportedEncodingException uue)            {                return new String( baos.toByteArray() );            }   // end catch        }   // end if: compress                // Else, don't compress. Better not to use streams at all then.        else        {            // Convert option to boolean in way that code likes it.            boolean breakLines = dontBreakLines == 0;                        int    len43   = len * 4 / 3;            byte[] outBuff = new byte[   ( len43 )                      // Main 4:3                                       + ( (len % 3) > 0 ? 4 : 0 )      // Account for padding                                       + (breakLines ? ( len43 / MAX_LINE_LENGTH ) : 0) ]; // New lines                  int d = 0;            int e = 0;            int len2 = len - 2;            int lineLength = 0;            for( ; d < len2; d+=3, e+=4 )            {                encode3to4( source, d+off, 3, outBuff, e );                lineLength += 4;                if( breakLines && lineLength == MAX_LINE_LENGTH )                {                       outBuff[e+4] = NEW_LINE;                    e++;                    lineLength = 0;                }   // end if: end of line            }   // en dfor: each piece of array            if( d < len )            {                encode3to4( source, d+off, len - d, outBuff, e );                e += 4;            }   // end if: some padding needed                        // Return value according to relevant encoding.            try            {                return new String( outBuff, 0, e, PREFERRED_ENCODING );            }   // end try            catch (java.io.UnsupportedEncodingException uue)            {                return new String( outBuff, 0, e );            }   // end catch                    }   // end else: don't compress            }   // end encodeBytes                /* ********  D E C O D I N G   M E T H O D S  ******** */            /**     * 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;

⌨️ 快捷键说明

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