Java通用唯一标识符

Java通用唯一标识符,java,Java,在java中,我们有UUID(通用唯一标识符)来生成唯一ID。 我使用它来获取唯一标识符 因此,我得到了一个唯一标识符:35ffa200-aaa5-40ec-ab6f-20bb36632f86(5个组由连字符分隔) 我不需要这么长的标识符。我的标识符必须是短值,比如代码必须只有3组。我怎样才能得到这么小的唯一标识符。UUID类有任何限制吗?我害怕对UUID使用字符串限制。这是正确的方法吗 或者有没有办法生成这样小的唯一标识符 谢谢。如果您将一个唯一的ID用于私人目的,也许像以毫秒为单位的当前时间

在java中,我们有UUID(通用唯一标识符)来生成唯一ID。 我使用它来获取唯一标识符

因此,我得到了一个唯一标识符:35ffa200-aaa5-40ec-ab6f-20bb36632f86(5个组由连字符分隔)

我不需要这么长的标识符。我的标识符必须是短值,比如代码必须只有3组。我怎样才能得到这么小的唯一标识符。UUID类有任何限制吗?我害怕对UUID使用字符串限制。这是正确的方法吗

或者有没有办法生成这样小的唯一标识符


谢谢。

如果您将一个唯一的ID用于私人目的,也许像以毫秒为单位的当前时间这样简单的东西就足够了?只有8个字节。或者,如果毫秒粒度不适合您,您可以将流程中的某种计数器(您的应用程序是分布式的吗?)与当前时间相结合。您可以将您的ID作为进程开始的时间,例如在计数器后面加上后缀


UUID算法旨在通过包括网络地址和时间戳,在所有时间内都是全局唯一的。

UUID代表全局唯一标识符。一个典型UUID的大多数位都致力于使标识符在时间和互联网的“空间”上都是唯一的。事实上,有许多不同的UUID格式以不同的方式解决了这个问题,但它们都依赖于UU特性的大量位(~128)。UUID上的提供了更多详细信息,并链接到相关标准和规范

您似乎在问是否可以使用UUID的子字符串。答案是,如果您这样做,您可能会得到一个标识符,该标识符没有足够强的唯一性保证

如果您想为私人目的生成标识符,它们可能不需要是通用唯一的。您的标识符的唯一性要求(和其他特征)将取决于您打算使用它们,如果您不告诉我们它们是什么,就很难提出适当的解决方案。但这里有一些例子:

  • 对于简单的情况,时间戳或其他单调递增的整数序列就足够了
  • 如果您想要弱或强的非猜测性,您可以使用某种随机或伪随机数生成器
  • 如果需要在多个位置生成这些数字,可以将位置合并到id中,或者以某种方式将id空间拆分为子空间

也有必要对标识符生成/使用的可能速率进行计算,并考虑当ID生成器用完时会发生什么。(环绕是否可以接受?您能否回收并重新发布不再使用的id?您选择的id表示是否允许您扩展/扩展id空间?

如果您的应用程序正在连接到数据库,则可以使用数据库表主键或序列生成唯一id。

谢谢您的回复。由于给了我一个ID格式(ID格式应该是:多字母、少整数和3个连字符),我不能使用当前时间(毫秒)作为我的ID格式。UUID类生成的id满足我的要求。但是长度太长了。我需要一个短的UUID。java中有没有其他方法可以做到这一点?再次感谢。我会看看UUID实现,我认为它的第一部分或最后一部分实际上是一个时间戳,所以如果这足够好的话,那么您可以使用该部分。但我不明白为什么不能在当前时间毫秒内设置连字符以使其成为所需的格式。我不认为Java中有任何受支持的方法可以拥有一个简短的UUID。如果这是您所要求的,您将不得不以某种方式运行自己的UUID。谢谢Francis。让我按你的建议试试。