Guide to UUID in Java
by baeldung
最近没怎么写代码,简单复习一下 Java 的 UUID 知识点吧,原文来自于 baeldung,这个网站有很多 Java 语言的技巧,经过我长期观察,内容相对各种中文博客是严谨靠谱很多的,可以日常看看,巩固知识。
1.概览
Java 中的 UUID 是一个 128bit 的值,通常用十六进制数字加"-"字符表示为长度 36 位的字符串,例如123e4567-e89b-12d3-a456-556642440000
,因为 128bit 是 16 字节,而一个字节可以表示为 2 个十六进制字符,"-"符号纯粹是为了可读性添加的,不实际存储于数据中。
UUID 广泛用于表示全局唯一值的场景,但是并不是完全不会重复,只是重复的概率较小,在数据量较大和多服务器环境中要注意 UUID 可能出现重复。
2.Java 的 UUID 类
Java 的 UUID 类有构造函数,具体我就不列了,因为不常用,UUID 提供了三个便利的静态方法来生成 UUID,最常用的是UUID uuid = UUID.randomUUID();
,这个方法会生成一个version 4
标准的 UUID。
3.结构
3.1 UUID 变体
结构里面的 A 位置(第 9 个字节)的前三位表明了变体的种类,示例里面的小写a (=10xx)
说明是 variant 2。
3.2 UUID 版本
结构里面的 B 位置(第 7 个字节)的前四位表示版本号,这里版本号是4
。对于当前 variant 2 的 UUID 来说,有 5 个不同的版本,java 实现了 v3 和 v4 版本,并且提供一个构造函数可以自定义生成任意规则的 UUID。
Time Based (UUIDv1)
基于当前设备的时间戳和 MAC 地址
DCE Security (UUIDv2)
也是基于时间戳和 MAC 地址,但是RFC 4122中没有描述详细实现规则
Name Based (UUIDv3 and UUIDv5)基于命名空间和名称的 hash 生成,v3 和 v5 的区别在于 hash 算法不同,v3 使用 MD5(128 bits)而 v5 使用 SHA-1(160 bits)。
Random (UUIDv4)基于随机数生成,Java 实现使用
SecureRandom
生成一个不可预测的随机数种子,以减少重复的概率。
版权声明: 本文为 InfoQ 作者【OutOfMemory1024】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f976afc7681244880c9fbd5a】。文章转载请联系作者。
评论