91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 8KB
    文件類型: .java
    金幣: 1
    下載: 1 次
    發布日期: 2021-10-07
  • 語言: Java
  • 標簽: UUID??

資源簡介

包含64位和32位的UUID,其中有詳細注釋,簡明易懂。

資源截圖

代碼片段和文件信息

package?cn.luischen.utils;


import?java.util.Arrays;
import?java.util.Random;

/**
?*?封裝UUID
?*/
public?abstract?class?UUID?{

????static?Random?r?=?new?Random();

????/**
?????*?根據一個范圍,生成一個隨機的整數
?????*?
?????*?@param?min
?????*????????????最小值(包括)
?????*?@param?max
?????*????????????最大值(包括)
?????*?@return?隨機數
?????*/
????public?static?int?random(int?min?int?max)?{
????????return?r.nextInt(max?-?min?+?1)?+?min;
????}

????private?static?final?char[]?_UU64?=?“-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz“.toCharArray();
????private?static?final?char[]?_UU32?=?“0123456789abcdefghijklmnopqrstuv“.toCharArray();

????/**
?????*?@return?64進制表示的緊湊格式的?UUID
?????*/
????public?static?String?UU64()?{
????????return?UU64(java.util.UUID.randomUUID());
????}

????/**
?????*?返回一個?UUID?,并用?64?進制轉換成緊湊形式的字符串,內容為?[\\-0-9a-zA-Z_]
?????*?


?????*?比如一個類似下面的?UUID:
?????*?
?????*?


?????*?a6c5c51c-689c-4525-9bcd-c14c1e107c80
?????*?一共?128?位,分做L64?和?R64,分為為兩個?64位數(兩個?long)
?????*????>?L?=?uu.getLeastSignificantBits();
?????*????>?UUID?=?uu.getMostSignificantBits();
?????*?而一個?64?進制數,是?6?位,因此我們取值的順序是
?????*?1.?從L64位取10次,每次取6位
?????*?2.?從L64位取最后的4位?+?R64位頭2位拼上
?????*?3.?從R64位取10次,每次取6位
?????*?4.?剩下的兩位最后取
?????*?這樣,就能用一個?22?長度的字符串表示一個?32?長度的UUID,壓縮了?1/3
?????*?

?????*?
?????*?@param?uu
?????*????????????UUID?對象
?????*?@return?64進制表示的緊湊格式的?UUID
?????*/
????public?static?String?UU64(java.util.UUID?uu)?{
????????int?index?=?0;
????????char[]?cs?=?new?char[22];
????????long?L?=?uu.getMostSignificantBits();
????????long?R?=?uu.getLeastSignificantBits();
????????long?mask?=?63;
????????//?從L64位取10次,每次取6位
????????for?(int?off?=?58;?off?>=?4;?off?-=?6)?{
????????????long?hex?=?(L?&?(mask?<>>?off;
????????????cs[index++]?=?_UU64[(int)?hex];
????????}
????????//?從L64位取最后的4位?+?R64位頭2位拼上
????????int?l?=?(int)?(((L?&?0xF)?<>>?62));
????????cs[index++]?=?_UU64[l];
????????//?從R64位取10次,每次取6位
????????for?(int?off?=?56;?off?>=?2;?off?-=?6)?{
????????????long?hex?=?(R?&?(mask?<>>?off;
????????????cs[index++]?=?_UU64[(int)?hex];
????????}
????????//?剩下的兩位最后取
????????cs[index++]?=?_UU64[(int)?(R?&?3)];
????????//?返回字符串
????????return?new?String(cs);
????}

????/**
?????*?從一個?UU64?恢復回一個?UUID?對象
?????*?
?????*?@param?uu64
?????*????????????64進制表示的?UUID?內容為?[\\-0-9a-zA-Z_]
?????*?@return?UUID?對象
?????*/
????public?static?java.util.UUID?fromUU64(String?uu64)?{
????????String?uu16?=?UU16FromUU64(uu64);
????????return?java.util.UUID.fromString(UU(uu16));
????}

????public?static?String?UU32(java.util.UUID?uu)?{
????????StringBuilder?sb?=?new?StringBuilder();
????????long?m?=?uu.getMostSignificantBits();
????????long?l?=?uu.getLeastSignificantBits();
????????for?(int?i?=?0;?i?????????????sb.append(_UU32[(int)?(m?>>?((13?-?i?-?1)?*?5))?&?31]);
????????}
????????for?(int?i?=?0;?i?????????????sb.append

評論

共有 條評論