package com.lym.order.util;import javax.xml.crypto.Data;
import java.util.Base64;
import java.util.Date;
import java.util.UUID;/*** 22 位UUID 生成器* 性能:i7-8750h 100w次生成耗时:*  原生36位(0.9s)*  去掉'-'32位(1s)*  Base64压缩22位(2.7s)*  字母大小写19位(4.7s)*/
public class UUIDUtil {/** 完整 UUID 共128位 (16 byte) */private static int UUID_LENGTH = 128 >> 3;/** UUID 可以分为两个 long 部分,long 类型长度 64 位 (8 byte) */private static int HALF_LENGTH = 64 >> 3;/** byte 类型有效位数为 8 */private static int BYTE_MASK = (1 << 8) - 1;private static Base64.Encoder base64Encoder = Base64.getEncoder().withoutPadding();/*** 生成 22 位压缩版 UUID: 用 base64 压缩 JDK 的 UUID* @return 压缩版的 22位 UUID*/@Overridepublic String nextId() {UUID uuid = UUID.randomUUID();long high = uuid.getMostSignificantBits();long low = uuid.getLeastSignificantBits();byte[] byteUuid = new byte[UUID_LENGTH];for (int i = 0; i < HALF_LENGTH; i++) {byteUuid[i] = (byte) (high >>> (HALF_LENGTH * (7 - i)) & BYTE_MASK);byteUuid[i + HALF_LENGTH] = (byte) (low >>> (HALF_LENGTH * (7 - i)) & BYTE_MASK);}return base64Encoder.encodeToString(byteUuid);}/*** 压缩** @param src uuid字符串,可带有{@code -}* @return base64字符串,length=22*/public static String compress(String src) {UUID uuid = UUID.fromString(src);long msb = uuid.getMostSignificantBits();long lsb = uuid.getLeastSignificantBits();byte[] b = new byte[16];for (int i = 0; i < 8; i++) {b[i] = (byte) (msb >>> (8 * (7 - i)) & 0xff);b[i + 8] = (byte) (lsb >>> (8 * (7 - i)) & 0xff);}return Base64.getEncoder().withoutPadding().encodeToString(b);}/*** 解压** @param src base64字符串,length=22* @return uuid字符串,{@code -}分割*/public static String decompress(String src) {byte[] b = Base64.getDecoder().decode(src);long msb = 0;long lsb = 0;for (int i = 0; i < 8; i++) {msb = (msb << 8) | (b[i] & 0xff);lsb = (lsb << 8) | (b[i + 8] & 0xff);}return new UUID(msb, lsb).toString();}public static void main(String[] args){}}

22位压缩版UUID相关推荐

  1. 2022年JDK8U321压缩版

    2022年jdk8u321-64位压缩版,解压缩后手动配置环境变量即可使用.我一直不太喜欢jdk的安装包版,奈何Oracle官网的jdk8是没有压缩版的,所以只能手动下载安装一遍.我把安装后的jdk和 ...

  2. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  3. win7原版iso_【JUJUMAO_MSDN系统】Windows 10 1903 64位 五版合一 原版ISO镜像

    [JUJUMAO_MSDN系统]Windows 10 1903 64位 五版合一 原版ISO镜像  MSDN系统具有更安全.更稳定.更纯净等特点,设置布局更加突出完美,采用全新技术,全自动无人值守安装 ...

  4. DiskTrix UltimateDefrag(磁盘碎片整理软件) v6.0.22.0破解版

    点击下载来源:DiskTrix UltimateDefrag(磁盘碎片整理软件) v6.0.22.0破解版 UltimateDefrag 6是一款全新的磁盘碎片整理软件,在新版本中有着多方面的改进与优 ...

  5. mysql压缩包5.7.20安装_Mysql 5.7.20压缩版下载和安装简易教程

    //www.jb51.net/softs/451120.html 1.进入官网下载,显示的应该是最新版本,选择第二个(mysql5.7.20-winx64.zip) 2.下载完成后,直接解压到自定义目 ...

  6. 使用.NET 框架压缩版开发Windows Mobile 2003 for Smartphone

    发布日期: 11/30/2004 | 更新日期: 11/30/2004 Andreas Sjöström, Christian Forsberg businessanyplace.net 适用于: M ...

  7. n皇后 - 位运算版

    n皇后问题是大家在递归里会碰到的一个经典问题.以前高中我学DFS的时候,老师首先让我看的就是八皇后. 不过这皇后的时间复杂度大家可想而知了.而接下来的位运算将这个效率重新提到一个高度. 我是以前在Ma ...

  8. PPDE第二季度迎新 | 欢迎22位AI开发者加入飞桨开发者技术专家计划!

    PPDE计划是飞桨开发者技术专家的荣誉认证体系,无论是热爱编程开发的资深程序员.大型技术社区的引领者,还是顶级开源软件的Committer.新兴科技公司创始人或CTO,这些开发者技术专家将通过线上线下 ...

  9. c# 数据可视化_#OpenVisConf上的22位数据可视化从业者的10点收获

    c# 数据可视化 by Siena Duplan 通过锡耶纳·杜普兰(Siena Duplan) #OpenVisConf上的22位数据可视化从业者的10点收获 (10 Takeaways from ...

最新文章

  1. python 类-Python类(class)
  2. c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)
  3. MFC中卡拉OK字体的定时器实现,使用DC的DrawText函数实现
  4. Java 14:查看更新的switch语句
  5. 使用Istio进行多集群部署管理:单控制平面 Gateway 连接拓扑
  6. 性能提升120倍!滴滴东北大学提出自动结构化剪枝压缩算法框架
  7. Thread.sleep() / Object.wait() / Condition.await() / LockSupport.park() / LockSupport.unpark() 区别
  8. Linux桌面版横评:五、Ubuntu 7.04
  9. 基于集成学习的小麦赤霉病高光谱图像识别方法研究
  10. 如何确定类型是否使用C#反射实现接口
  11. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP
  12. .net WPF是什么
  13. LaTeX通用简洁模板
  14. 微星组件环境linux,微星笔记本常用系统环境组件下载集合
  15. mybatis-plus 多条件下关键字查询
  16. Eureka的自我保护机制
  17. YAML Syntax Error Duplicated mapping key at line 62, column 24: description: 城市主键
  18. python 百分号调用内置函数_建议你吃透python这68个内置函数!
  19. 安卓手机里的短信删除了如何恢复
  20. A*算法理解(unity C#)

热门文章

  1. 51单片机lcd1602实验(单片机的模拟电话拨号)
  2. MBA数学应试七种武器
  3. Installation silently blocked for package name fix
  4. 我们都没有迎来决赛---Leo读 不是孙振耀写的职场感言 1
  5. 刷题日记 acwing 2058笨拙的手指 位运算的运用,迭代器的使用,秦九稍(别的进制转化为10进制)
  6. 抖音直播各类话术?开场、留人、促单互动话术合集
  7. Pywinauto Guideline
  8. 补充小程序的一些观点,以及你可能还不知道的事(内附最全小程序名单、小程序商店)...
  9. 为什么精英这么用脑不会累
  10. STM32使用OLED移植U8g2库