資源簡介
包含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)?<2)?|?((R?&?(3?<62))?>>>?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?13;?i++)?{
????????????sb.append(_UU32[(int)?(m?>>?((13?-?i?-?1)?*?5))?&?31]);
????????}
????????for?(int?i?=?0;?i?13;?i++)?{
????????????sb.append
- 上一篇:酒店預訂系統畢業設計整套
- 下一篇:語法分析器java實現
評論
共有 條評論