Archivos por Etiqueta: String

Java: Fast int/long to Hex String (left-zero-padding)

private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray();

public static String intAsHex(final int input) {
    final char[] sb = new char[8];
    final int len = (sb.length-1);
    for (int i = 0; i <= len; i++) { // MSB
        sb[i] = HEX_CHARS[((int)(input >>> ((len - i)<<2))) & 0xF];
    }
    return new String(sb);
}
public static String longAsHex(final long input) {
    final char[] sb = new char[16];
    final int len = (sb.length-1);
    for (int i = 0; i <= len; i++) { // MSB
        sb[i] = HEX_CHARS[((int)(input >>> ((len - i)<<2))) & 0xF];
    }
    return new String(sb);
}

Java: Alternative to String.intern() for canonical representation

Si has usado el metodo String.intern() (en versiones anteriores a Java 7) seguro que te suena el “java.lang.OutOfMemoryError: PermGen space” [1]

Una pequeña alternativa:

import java.util.WeakHashMap;
import java.lang.ref.WeakReference;

public class StringPoolWH {
	private static final WeakHashMap<String,WeakReference> map = new WeakHashMap<String,WeakReference>();

	public static synchronized String getCanonicalVersion(final String str) {
		final WeakReference ref = map.get(str);
		if (ref != null) {
			final String cstr = ref.get();
			if (cstr != null) {
				return cstr;
			}
		}
		map.put(str, new WeakReference(str));
		return str;
	}
}

String.intern() cambió en Java 7 y 8 y ya no se usa el PermGen. Más información en: String.intern() in Java 6, 7 and 8

A %d blogueros les gusta esto: