package com.limegroup.gnutella.util; import java.util.Collection; import java.util.Iterator; import java.util.Set; import com.limegroup.gnutella.ByteOrder; /** * Utility class that supplies commonly used data sets that each * class should not have to create on its own. These data sets * are immutable objects, so any class and any thread may access them * whenever they like. */ public final class DataUtils { /** * Ensure that this class cannot be constructed. */ private DataUtils() {} /** * Constant empty byte array for any class to use -- immutable. */ public static byte[] EMPTY_BYTE_ARRAY = new byte[0]; /** * An empty byte array length 1. */ public static byte[] BYTE_ARRAY_ONE = new byte[1]; /** * An empty byte array length 2. */ public static byte[] BYTE_ARRAY_TWO = new byte[2]; /** * An empty byte array length 3. */ public static byte[] BYTE_ARRAY_THREE = new byte[3]; static { BYTE_ARRAY_ONE[0] = 0; BYTE_ARRAY_TWO[0] = 0; BYTE_ARRAY_TWO[1] = 0; BYTE_ARRAY_THREE[0] = 0; BYTE_ARRAY_THREE[1] = 0; BYTE_ARRAY_THREE[2] = 0; } /** * Constant empty string array for any class to use -- immutable. */ public static String[] EMPTY_STRING_ARRAY = new String[0]; /** * An 16-length empty byte array, for GUIDs. */ public static final byte[] EMPTY_GUID = new byte[16]; /** * The amount of milliseconds in a week. */ public static final long ONE_WEEK = 7 * 24 * 60 * 60 * 1000; /** * Determines whether or not the the child Set contains any elements * that are in the parent's set. */ public static boolean containsAny(Collection parent, Collection children) { for(Iterator i = children.iterator(); i.hasNext(); ) if(parent.contains(i.next())) return true; return false; } /** * Utility function to write out the toString contents * of a URN. */ public static String listSet(Set s) { StringBuffer sb = new StringBuffer(); for(Iterator i = s.iterator(); i.hasNext();) sb.append(i.next().toString()); return sb.toString(); } /** * Prints out the contents of the input array as a hex string. */ public static String toHexString(byte[] bytes) { StringBuffer buf=new StringBuffer(); String str; int val; for (int i=0; i<bytes.length; i++) { //Treating each byte as an unsigned value ensures //that we don't str doesn't equal things like 0xFFFF... val = ByteOrder.ubyte2int(bytes[i]); str = Integer.toHexString(val); while ( str.length() < 2 ) str = "0" + str; buf.append( str ); } return buf.toString().toUpperCase(); } }