欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java自定义安全、高性能、线程安全的Url编码函数,javaurl,import java.

来源: javaer 分享于  点击 9728 次 点评:110

Java自定义安全、高性能、线程安全的Url编码函数,javaurl,import java.


import java.nio.CharBuffer;import java.util.BitSet;public class URLEncoder {    private static final char [] IGNORED_BY_DEFAULT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!*()-_'.~".toCharArray();    private static final char [] HEX = "0123456789ABCDEF".toCharArray();    private static final URLEncoder DEFAULT = new URLEncoder();    public static CharSequence encode( CharSequence s ) {        return getDefaultInstance().encodeURIComponent( s );    }    public static URLEncoder getDefaultInstance() {        return DEFAULT;    }    /**     * Convert a number to a character array, using the provided buffer.     *      * @param number     *            the number to convert     * @param array     *            the buffer in which to store the character representation of the converted number     * @param mapping     *            an array of characters whose index corresponds to the character representing that     *            digit. The length of this array determines in which base the number will be     *            represented in the given array.     * @return the given array, after modification. If the array's length is greater than is     *         necessary, its contents will be right-aligned and left-padded with the mapping for     *         the number zero. For example, the result of     *         {@code itoa( 5, new char[8], "01".toCharArray() )} would be "00000101".     */    public static char [] itoa( int number, char [] array, char [] mapping ) {        int count = 0;        int maximum = array.length - 1;        for( int value = number; value > 0; value /= mapping.length ) {            int digit = value % mapping.length;            value -= digit;            array[maximum - count] = mapping[digit];            count++;        }        if( count <= maximum ) {            for( int zero = count; zero <= maximum; zero++ ) {                array[maximum - zero] = mapping[0];            }        }        return array;    }    public static char [] itoa( int number, int arrayLength, char [] mapping ) {        return itoa( number, new char [arrayLength], mapping );    }    public static char [] itoa( int number, int arrayLength, String mapping ) {        return itoa( number, arrayLength, mapping.toCharArray() );    }    private final char [] a = new char [2];    private final BitSet ignored = new BitSet( 256 );    public URLEncoder() {        this( IGNORED_BY_DEFAULT );    }    /**     * Constructs a new URL encoder that encodes everything except the given characters.     *      * @param unencodedCharacters     *            an array of characters to ignore when encoding.     */    public URLEncoder( char [] unencodedCharacters ) {        for( int i = 0; i < unencodedCharacters.length; i++ ) {            ignored.set( unencodedCharacters[i] );        }    }    public URLEncoder( String unencodedCharacters ) {        this( unencodedCharacters.toCharArray() );    }    public CharSequence encodeURIComponent( CharSequence s ) {        CharBuffer out = CharBuffer.allocate( s.length() * 3 );        out.limit( s.length() );        for( int i = 0; i < s.length(); i++ ) {            char c = s.charAt( i );            if( ignored.get( c ) ) {                out.append( c );            } else {                out.append( '%' );                out.limit( out.limit() + 2 );                itoa( c, a, HEX );                out.append( a[0] );                out.append( a[1] );            }        }        out.position( 0 );        return out;    }}
相关栏目:

用户点评