Java 缩短UUID为22位
来源:互联网 发布:java rpc 框架 编辑:程序博客网 时间:2024/05/23 23:12
参考:
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制字符数组
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; // 0x0000003FLdo {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+
阅读全文
0 0
- Java 缩短UUID为22位
- java 生成22位UUID 改造
- java 生成22位UUID 改造
- 获取22位UUID
- java-自定义的进制转换-可以处理缩短uuid长度的问题
- Java中获取32位UUID(自认为最简便版)
- JAVA生成短8位UUID
- JAVA生成短8位UUID
- JAVA生成短8位UUID
- JAVA生成短8位UUID
- java生成短8位uuid
- java随机生成16位UUID
- java生成32位的UUID
- 简单明了的JAVA生成32位UUID
- java 生成UUID 36位码 36位码
- JAVA实现网址缩短
- Java、JavaScript、php、mysql、oracle生成uuid(32位)
- Java之——生成短8位UUID
- matlab nii 文件读取
- Methyl phenyl vinyl silicone rubber IOTA 120
- oracle SET SERVEROUTPUT ON with Toad
- 查看Oracle版本信息
- 应用内购:自动更新订阅教程
- Java 缩短UUID为22位
- itext中文问题
- 深入浅出 java 回调原理
- Mac的eclipse使用External Tools定位class
- N个人过河问题
- itext基本编辑单元
- CDH5.7.2搭建
- turn on AUTOCOMMIT with toad
- PHP,Form提交多行数据处理