UUID

HTTP 请求

加密/解密

Common 常用模块

Reflection 反射

Input/Output 输入/输出

ULID 教程

本教程提供了 ULID 类的概述,该类是 lightweight-component/aj-util 库的一部分。ULID(通用唯一词典排序标识符)提供了一种具有改进功能的 UUID 现代替代方案。

简介

ULID 类实现了 ULID 规范,该规范提供了与 UUID 的 128 位兼容性,同时通过 Crockford 的 Base32 编码提供了词典排序和更好的可读性。ULID 由以下部分组成:

  1. 时间戳组件(48 位)- 毫秒精度
  2. 随机性组件(80 位)- 加密安全的随机值

这种组合确保了 ULID:

方法

1. random()random(Random random)

使用当前时间戳和随机熵生成随机 ULID。

示例:

// 使用默认安全随机数
ULID ulid = ULID.random();

// 使用自定义随机生成器
ULID customUlid = ULID.random(new SecureRandom());

2. generate(long time, byte[] entropy)

从特定时间戳和熵字节生成 ULID。

示例:

long timestamp = System.currentTimeMillis();
byte[] entropy = new byte[10];
new SecureRandom().nextBytes(entropy);

ULID ulid = ULID.generate(timestamp, entropy);

3. fromString(String val)

从字符串表示解析 ULID。

示例:

ULID ulid = ULID.fromString("01ARZ3NDEKTSV4RRFFQ69G5FAV");

4. fromBytes(byte[] v)

从二进制表示构造 ULID。

示例:

byte[] bytes = new byte[16];
// 用有效的 ULID 数据填充字节
ULID ulid = ULID.fromBytes(bytes);

5. fromUUID(UUID val)toUUID()

在 ULID 和 UUID 格式之间转换。

示例:

// 将 UUID 转换为 ULID
UUID uuid = UUID.randomUUID();
ULID ulid = ULID.fromUUID(uuid);

// 将 ULID 转换为 UUID
UUID convertedUuid = ulid.toUUID();

6. toString()

将 ULID 作为 Crockford 的 Base32 编码字符串(26 个字符)返回。

示例:

ULID ulid = ULID.random();
String ulidString = ulid.toString(); // 例如:"01F8MECHZCP3WGH3SNAPCH3D5E"

7. getTimestamp()getEntropy()

从 ULID 中提取时间戳或熵组件。

示例:

ULID ulid = ULID.random();
long timestamp = ulid.getTimestamp();
byte[] entropy = ulid.getEntropy();

与 UUID 的比较

ULID 相比传统的 UUID 有几个优势:

  1. 可排序性:由于其时间戳优先的结构,ULID 可以进行词典排序。
  2. 可读性:Crockford Base32 编码比 UUID 的十六进制格式更易于人类阅读。
  3. 时间戳:ULID 嵌入了创建时间,使其对基于时间的操作很有用。
  4. 兼容性:ULID 保持与 UUID 的二进制兼容性。

结论

ULID 类提供了一种现代标识符解决方案,它结合了 UUID 的唯一性和改进的可排序性和可读性。它特别适用于分布式系统、数据库和任何需要唯一的、按时间排序的标识符的应用程序。