我正在准备一个 Java 库,该库需要为生成的对象分配一个唯一的 id 以进行序列化。一旦生成了唯一的 id,我必须确保下次使用该库时,不可能将 id 重新分配给我过去已经保存的对象。
现在,我看到Stackoverflow中的许多人建议依赖几个选项,即UUID
, SecureRandom
,但我不确定这些类是否适合我的需求,也不知道如何使用它们。
拜托,您能否向自己介绍要使用的正确实用程序以及如何生成 id?
欢迎使用基于 Guava/Apache 实用程序的解决方案。
我正在准备一个 Java 库,该库需要为生成的对象分配一个唯一的 id 以进行序列化。一旦生成了唯一的 id,我必须确保下次使用该库时,不可能将 id 重新分配给我过去已经保存的对象。
现在,我看到Stackoverflow中的许多人建议依赖几个选项,即UUID
, SecureRandom
,但我不确定这些类是否适合我的需求,也不知道如何使用它们。
拜托,您能否向自己介绍要使用的正确实用程序以及如何生成 id?
欢迎使用基于 Guava/Apache 实用程序的解决方案。
生成重复 UUID 的概率非常低。我不知道不同机器上的 2 个 UUID 实例生成相同 ID 的可能性,但是 UUID 在 JVM 中应该是唯一的。我不会为了生成 UUID 而嵌入数据库的麻烦。你可以安全地使用java UUID
。
替代解决方案
如果您需要跨多个程序调用的唯一 ID,请使用数据库序列。您可以要求数据库缓存序列的下 N 个数字,以使其合理快速,并且该值将在调用之间保持不变。UUID 使用起来更方便,但两种解决方案都可以使用。如果您使用数据库,您将了解已序列化的对象数量。
如果您的对象需要一个唯一的编号,那么为什么不只是做一个序列。您必须编写一个执行以下操作的自定义类: