如何使用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======
我不想要这么大的字符串而是唯一的字符串。
答案 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);
}