String s = UUID.randomUUID().toString();
return s.substring(0,8) + s.substring(9,13) + s.substring(14,18) +
s.substring(19,23) + s.substring(24);
我使用 JDK1.5 的 UUID,但是当我从网络连接/断开连接时它使用了太多时间。
我认为 UUID 可能想要访问一些网络。
有谁能够帮我?
UUID 生成在本地完成,不需要任何活动的网络连接。
引用API odc:
public static UUID randomUUID()
用于检索类型 4(伪随机生成)UUID 的静态工厂。UUID 是使用加密强的伪随机数生成器生成的。
您的延迟可能是由加密强 RNG 的初始化引起的 - 这需要一些时间,甚至可能取决于网络连接的存在作为熵的来源。但是,这应该只在 JVM 运行时发生一次。不过,我看不出解决这个问题的方法。
这些 s.substring 调用的目的是什么?看起来您正在返回原始字符串。
对于旧版本的 Java(可能是 6 或更早版本?),Random 中存在一个错误,导致它遍历整个临时目录。我们已经看到在 NVIDIA 的一些非常糟糕的构建机器上生成种子需要 10 分钟。您可能想检查临时目录的大小。
比较: http: //www.docjar.com/html/api/sun/security/provider/SeedGenerator.java.html 到:http ://www.java2s.com/Open-Source/Java-Document/6.0-JDK -模块/j2me/sun/security/provider/SeedGenerator.java.htm
UUID 的 javadoc http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html有一些关于如何生成 UUID 的好信息。它使用时间和时钟频率来生成 UUID。就像尖牙所说,不需要网络接口。是否有其他可能导致此问题的并发进程正在运行?
如果您在大量数据上附加 5 个字符串,则可能是问题所在。尝试使用 StringBuffer。将 1-2 个以上的字符串连接在一起时会产生惊人的差异,尤其是对于较大的数据集