Java 缩短UUID为22位_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 缩短UUID为22位

Java 缩短UUID为22位

 2014/9/10 19:00:50  cloudjie  程序员俱乐部  我要评论(0)
  • 摘要:参考:http://stackoverflow.com/questions/1389736/how-do-i-create-a-unique-id-in-java/1389747这里面最后一个人的回答,就是利用无符号右移,每6位转换为64制字符http://blog.csdn.net/sskicgah/article/details/12904881这位仁兄也参考了别人的就不列举了思路:UUID为128位,取高低64位分别处理,转为64制字符,我没有按照Base64的字符表来
  • 标签:Java

参考:

http://stackoverflow.com/questions/1389736/how-do-i-create-a-unique-id-in-java/1389747 这里面最后一个人的回答,就是利用无符号右移,每6位转换为64制字符

http://blog.csdn.net/sskicgah/article/details/12904881 这位仁兄也参考了别人的就不列举了

?

思路:UUID为128位,取高低64位分别处理,转为64制字符,我没有按照Base64的字符表来,随着自己的性子惯了,也没有3字节转为4字节,参考别人直接64位每低6位转为int对应一个64制字符数组

?

class="java">public class GenerateShortUUID {
	private final static char[] DIGITS64 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
	
	public static String next() {
		UUID u = UUID.randomUUID();
//		return u.toString();
		return toIDString(u.getMostSignificantBits()) + toIDString(u.getLeastSignificantBits());
	}

	private static String toIDString(long l) {
		char[] buf = "00000000000".toCharArray(); // 限定11位长度
		int length = 11;
		long least = 63L; // 0x0000003FL
		do {
			buf[--length] = DIGITS64[(int) (l & least)]; // l & least取低6位
			/* 无符号的移位只有右移,没有左移
			 * 使用“>>>”进行移位
			 * 为什么没有无符号的左移呢,知道原理的说一下哈
			 */
			l >>>= 6;
		} while (l != 0);
		return new String(buf);
	}

	public static void main(String[] args) {
		long time = System.currentTimeMillis();
		for (int i=0; i<1000000L; i++) {
			next();
		}
		System.out.println(System.currentTimeMillis() - time);
	}
}

?效率么:100W数据,我这机器上是1100ms+

?

发表评论
用户名: 匿名