BaseEncoding生成ID

时间:2013-10-15 10:49:44

标签: java algorithm guava

如何使用com.google.common.base.BaseEncoding库生成唯一ID。

public class google {

    static synchronized String generateIdforDCR()
    {
        return (String)BaseEncoding.base32().lowerCase().encode(UUID.randomUUID().toString().getBytes(Charsets.US_ASCII));

    }
    public static void main(String[] args)
    {
        for(int i=0;i<100;i++)
        {
            System.out.println(google.generateIdforDCR());
        }


    }

}

输出是:

gbsdgzrvgrsgclldgeytiljuga2wmllcmjstkllbmm3dszjymnrtcyjwga======
gi3gknbzg5tgiljrmq4tkljumqytmllbgfswkllbmiztim3fhbtdomldmq======
me4danrzgiyggllggu2dgljuhbrgillcmjswiljvgm2wimlemnrtqolgha======
meygmmrxgzsdgljqgbtgeljumm2wgllbmjrdsljrga3dgzrsguztgn3fmi======

我不想要这么大的字符串而是唯一的字符串。

1 个答案:

答案 0 :(得分:2)

UUID是128位长,这意味着它将base32编码为这58个字符(你可以删除尾随的等号)。你可以使用base64缩短它,但这不是一个大赢家。如果你想要更短的东西并保证是独一无二的,你需要一个柜台。

这样的东西
private static AtomicLong counter = new AtomicLong();

static String generateIdforDCR() { // no need for synchronized
    return String.valueOf(counter.getAndIncrement());
}

应该这样做。您可以对其进行64位编码,以获得更短的输出。或者只使用base36:

static String generateIdforDCR() { // no need for synchronized
    return Long.toString(counter.getAndIncrement(), Character.MAX_RADIX);
}