www.pudn.com > GMapViewer-src.zip > Util.java



package org.sreid.j2me.util;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;

/** Various static utility methods. */
public final class Util {
	private Util() { }

	// these really ought to be statics in Boolean itself, like in J2SE
	public static final Boolean BOOLEAN_TRUE = new Boolean(true);
	public static final Boolean BOOLEAN_FALSE = new Boolean(false);

	private static final String HEXDIGITS = "0123456789ABCDEF";

	/** Reads 4 bytes from a byte array, starting at offset, and converts them to an int. */
	public static int bytesToInt(byte[] data, int offset) {
		return (
		 ((data[offset+0] & 0xff) << 24) |
		 ((data[offset+1] & 0xff) << 16) |
		 ((data[offset+2] & 0xff) <<  8) |
		 ((data[offset+3] & 0xff) <<  0) );
	}

	/** Writes an int into a byte array as 4 bytes, starting at offset. */
	public static void intToBytes(int value, byte[] data, int offset) {
		data[offset+0] = (byte)((value >> 24) & 0xff);
		data[offset+1] = (byte)((value >> 16) & 0xff);
		data[offset+2] = (byte)((value >>  8) & 0xff);
		data[offset+3] = (byte)((value >>  0) & 0xff);
	}

	public static String urlEncode(String str) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (Character.isLowerCase(c) || Character.isUpperCase(c) || Character.isDigit(c)) {
				// Letter or number. No need to encode.
				sb.append(c);
			}
			else {
				// Encode it.
				int cc = (int)c;
				if (cc < 0 || cc > 255) {
					sb.append('?'); //XXX
				}
				else {
					sb.append('%');
					sb.append(HEXDIGITS.charAt((cc >> 4) & 0x0f));
					sb.append(HEXDIGITS.charAt(cc & 0x0f));
				}
			}
		}
		return sb.toString();
	}

	public static String bytesToHex(byte[] data, int off, int len) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < len; i++) {
			if (i != 0) sb.append(' ');
			int b = data[off+i] & 0xff;
			sb.append(HEXDIGITS.charAt((b >> 4) & 0x0f));
			sb.append(HEXDIGITS.charAt(b & 0x0f));
		}
		return sb.toString();
	}

}