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

📄 utils.java

📁 用java开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}	    }	else if ( o instanceof short[] )	    {	    short[] sa = (short[]) o;	    for ( int i = 0; i < sa.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( "(short)" );		sb.append( sa[i] );		}	    }	else if ( o instanceof int[] )	    {	    int[] ia = (int[]) o;	    for ( int i = 0; i < ia.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( ia[i] );		}	    }	else if ( o instanceof long[] )	    {	    long[] la = (long[]) o;	    for ( int i = 0; i < la.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( la[i] );		sb.append( "L" );		}	    }	else if ( o instanceof float[] )	    {	    float[] fa = (float[]) o;	    for ( int i = 0; i < fa.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( fa[i] );		sb.append( "F" );		}	    }	else if ( o instanceof double[] )	    {	    double[] da = (double[]) o;	    for ( int i = 0; i < da.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( da[i] );		sb.append( "D" );		}	    }	else if ( o instanceof String )	    {	    // Special-case Strings so we can surround them with quotes.	    String[] sa = (String[]) o;	    for ( int i = 0; i < sa.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( "\"" );		sb.append( sa[i] );		sb.append( "\"" );		}	    }	else if ( cl.startsWith( "[L" ) )	    {	    // Some random class.	    Object[] oa = (Object[]) o;	    for ( int i = 0; i < oa.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( oa[i] );		}	    }	else if ( cl.startsWith( "[[" ) )	    {	    // Nested arrays.	    Object[] aa = (Object[]) o;	    for ( int i = 0; i < aa.length; ++i )		{		if ( i > 0 ) sb.append( ", " );		sb.append( arrayToString( aa[i] ) );		}	    }	else	    sb.append( "(unknown array type)" );	sb.append( " }" );	return sb.toString();	}    /// Check if an object extends a given class or one of its superclasses.    // An instanceof that works on Class objects at runtime, instead    // of type descriptors at compile time.    public static boolean instanceOf( Object o, Class cl )	{	// Null check.	if ( o == null || cl == null )	    return false;	Class ocl = o.getClass();	// Check if they are the same class.	if ( ocl.equals( cl ) )	    return true;	// If the class is not itself an interface, then check its interfaces.	if ( ! cl.isInterface() )	    {	    Class ifs[] = cl.getInterfaces();	    for ( int i = 0; i < ifs.length; ++i )		if ( instanceOf( o, ifs[i] ) )		    return true;	    }	// And check supeclasses.	Class scl = cl.getSuperclass();	if ( scl != null )	    if ( instanceOf( o, scl ) )		return true;	// Guess not.	return false;	}    /// Test is a number is even.    public static boolean even( long n )	{	return ( n & 1 ) == 0;	}    /// Test is a number is odd.    public static boolean odd( long n )	{	return ( n & 1 ) != 0;	}    /// Count the number of 1-bits in a byte.    public static int countOnes( byte n )	{	return countOnes( n & 0xffL );	}    /// Count the number of 1-bits in an int.    public static int countOnes( int n )	{	return countOnes( n & 0xffffffffL );	}    /// Count the number of 1-bits in a long.    public static int countOnes( long n )	{	// There are faster ways to do this, all the way up to looking	// up bytes in a 256-element table.  But this is not too bad.	int count = 0;	while ( n != 0 )	    {	    if ( odd( n ) )		++count;	    n >>>= 1;	    }	return count;	}    /// A fixed version of java.io.InputStream.read(byte[], int, int).  The    // standard version catches and ignores IOExceptions from below.    // This version sends them on to the caller.    public static int read( InputStream in, byte[] b, int off, int len ) throws IOException        {        if ( len <= 0 )            return 0;        int c = in.read();        if ( c == -1 )            return -1;        if ( b != null )            b[off] = (byte) c;        int i;        for ( i = 1; i < len ; ++i )            {            c = in.read();            if ( c == -1 )                break;            if ( b != null )                b[off + i] = (byte) c;            }        return i;        }    /// A version of read that reads the entire requested block, instead    // of sometimes terminating early.    // @return -1 on EOF, otherwise len    public static int readFully( InputStream in, byte[] b, int off, int len ) throws IOException        {	int l, r;	for ( l = 0; l < len; )	    {	    r = read( in, b, l, len - l );	    if ( r == -1 )		return -1;	    l += r;	    }	return len;	}    /// Make a URL with no ref part and no query string.  Also, if it's    // a directory then make sure there's a trailing slash.    public static URL plainUrl( URL context, String urlStr ) throws MalformedURLException	{	URL url = new URL( context, urlStr );	String fileStr = url.getFile();	int i = fileStr.indexOf( '?' );	if ( i != -1 )	    fileStr = fileStr.substring( 0, i );	url = new URL(	    url.getProtocol(), url.getHost(), url.getPort(), fileStr );	if ( ( ! fileStr.endsWith( "/" ) ) &&	     urlStrIsDir( url.toExternalForm() ) )	    {	    fileStr = fileStr + "/";	    url = new URL(		url.getProtocol(), url.getHost(), url.getPort(), fileStr );	    }	return url;	}    /// Make a URL with no ref part and no query string.  Also, if it's    // a directory then make sure there's a trailing slash.    public static URL plainUrl( String urlStr ) throws MalformedURLException	{        return plainUrl( null, urlStr );        }    /// Figure out the base URL for a given URL.  What this means is    // if the URL points to a directory, you get that directory; if the    // URL points to a file, you get the directory the file is in.    public static String baseUrlStr( String urlStr )	{	if ( urlStr.endsWith( "/" ) )	    return urlStr;	if ( urlStrIsDir( urlStr ) )	    return urlStr + "/";	return urlStr.substring( 0, urlStr.lastIndexOf( '/' ) + 1 );	}    /// Makes sure if a URL is a directory, it ends with a slash.    public static String fixDirUrlStr( String urlStr )	{	if ( urlStr.endsWith( "/" ) )	    return urlStr;	if ( urlStrIsDir( urlStr ) )	    return urlStr + "/";	return urlStr;	}    /// Figures out whether a URL points to a directory or not.    // Web servers are lenient and accept directory-URLs without    // the trailing slash.  What they actually do is return a    // redirect to the same URL with the trailing slash appended.    // Unfortunately, Java doesn't let us see that such a redirect    // happened.  Instead we have to figure out it's a directory    // indirectly and heuristically.    public static boolean urlStrIsDir( String urlStr )	{	// If it ends with a slash, it's probably a directory.	if ( urlStr.endsWith( "/" ) )	    return true;	// If the last component has a dot, it's probably not a directory.	int lastSlash = urlStr.lastIndexOf( '/' );	int lastPeriod = urlStr.lastIndexOf( '.' );	if ( lastPeriod != -1 && ( lastSlash == -1 || lastPeriod > lastSlash ) )	    return false;	// Otherwise, append a slash and try to connect.  This is	// fairly expensive.	String urlStrWithSlash = urlStr + "/";	try	    {	    URL url = new URL( urlStrWithSlash );	    InputStream f = url.openStream();	    f.close();	    // Worked fine - it's probably a directory.	    return true;	    }	catch ( Exception e )	    {	    // Got an error - must not be a directory.	    return false;	    }	}    // Figures out whether a URL is absolute or not.    public static boolean urlStrIsAbsolute( String urlStr )	{	if ( urlStr.startsWith( "/" ) || urlStr.indexOf( ":/" ) != -1 )	    return true;	// Should handle :8000/ and such too.	return false;	}    // Returns an equivalent URL string that is guaranteed to be absolute.    public static String absoluteUrlStr( String urlStr, URL contextUrl ) throws MalformedURLException	{	URL url = new URL( contextUrl, urlStr );	return url.toExternalForm();	}        /// URLDecoder to go along with java.net.URLEncoder.  Why there isn't    // already a decoder in the standard library is a mystery to me.    public static String urlDecoder( String encoded )	{	StringBuffer decoded = new StringBuffer();	int len = encoded.length();	for ( int i = 0; i < len; ++i )	    {	    if ( encoded.charAt( i ) == '%' && i + 2 < len )		{		int d1 = Character.digit( encoded.charAt( i + 1 ), 16 );		int d2 = Character.digit( encoded.charAt( i + 2 ), 16 );		if ( d1 != -1 && d2 != -1 )		    decoded.append( (char) ( ( d1 << 4 ) + d2 ) );		i += 2;		}	    else if ( encoded.charAt( i ) == '+' )		decoded.append( ' ' );	    else		decoded.append( encoded.charAt( i ) );	    }	return decoded.toString();	}    /// Check if an array contains a given element.    public static boolean arraycontains( Object[] array, Object element )	{	for ( int i = 0; i < array.length; ++i )	    if ( array[i].equals( element ) )		return true;	return false;	}    /// Run a program on the host system.    // <P>    // This routine runs the specified command, waits for it to    // finish, and returns the exit status.    // This is like the Unix system() routine.  Unlike the Unix version,    // though, stdout and stderr get thrown away unless you redirect them.    public static int system( String cmd )	{	try	    {	    return runCommand( cmd ).waitFor();	    }	catch ( IOException e )	    {	    return -1;	    }	catch ( InterruptedException e )	    {	    return -1;	    }	}    /// Run a program on the host system, and capture the output.    // <P>    // This routine runs the specified command, and returns an InputStream    // for reading the output of the program.    // <P>    // <B>WARNING:</B> In JDK1.0.2 there is a serious bug in the process    // IO routines, such that reading all the way to the end of a process's    // output will invariably get you an IOException( "read error" ).    // In some cases you will also <B>lose</B> the last bufferload of    // the output.  The workaround is to add a " ; sleep 1" to the end of    // your command, and to ignore the "read error" IOException.    public static InputStream popenr( String cmd )	{	try	    {	    return runCommand( cmd ).getInputStream();	    }	catch ( IOException e )	    {	    return null;	    }	}    /// Run a program on the host system, and send it some input.    // <P>    // This routine runs the specified command, and returns an OutputStream    // for writing the program's input.    public static OutputStream popenw( String cmd )	{	try	    {	    return runCommand( cmd ).getOutputStream();	    }	catch ( IOException e )	    {	    return null;	    }	}    /// Run a program on the host system.    // <P>    // This routine runs the specified command, and returns a Process    // object so you can do what you like with it.    // <P>    // <B>WARNING:</B> In JDK1.0.2 there is a serious bug in the process    // IO routines, such that reading all the way to the end of a process's    // output will invariably get you an IOException( "read error" ).    // In some cases you will also <B>lose</B> the last bufferload of    // the output.  The workaround is to add a " ; sleep 1" to the end of    // your command, and to ignore the "read error" IOException.    public static Process runCommand( String cmd ) throws IOException	{	Runtime runtime = Runtime.getRuntime();	String[] shCmd = new String[3];	shCmd[0] = "/bin/sh";	shCmd[1] = "-c";	shCmd[2] = cmd;	return runtime.exec( shCmd );	}    /// Copy the input to the output until EOF.    public static void copyStream( InputStream in, OutputStream out ) throws IOException	{	byte[] buf = new byte[4096];	int len;	while ( ( len = in.read( buf ) ) != -1 )	    out.write( buf, 0, len );	}    /// Copy the input to the output until EOF.    public static void copyStream( Reader in, Writer out ) throws IOException	{	char[] buf = new char[4096];	int len;	while ( ( len = in.read( buf ) ) != -1 )	    out.write( buf, 0, len );	}    /// Copy the input to the output until EOF.    public static void copyStream( InputStream in, Writer out ) throws IOException	{	byte[] buf1 = new byte[4096];	char[] buf2 = new char[4096];	int len, i;	while ( ( len = in.read( buf1 ) ) != -1 )	    {	    for ( i = 0; i < len; ++i )		buf2[i] = (char) buf1[i];	    out.write( buf2, 0, len );	    }	}    /// Copy the input to the output until EOF.    public static void copyStream( Reader in, OutputStream out ) throws IOException	{	char[] buf1 = new char[4096];	byte[] buf2 = new byte[4096];	int len, i;	while ( ( len = in.read( buf1 ) ) != -1 )	    {	    for ( i = 0; i < len; ++i )		buf2[i] = (byte) buf1[i];	    out.write( buf2, 0, len );	    }	}    /// Dump out the current call stack.    public static void dumpStack( PrintStream p )	{	(new Throwable()).printStackTrace( p );	}    /// Dump out the current call stack onto System.err.    public static void dumpStack()	{	(new Throwable()).printStackTrace();	}    /// add a hash table to a hash table    public static void putAll(Hashtable _dest, Hashtable _src) {    }    }

⌨️ 快捷键说明

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