我有一个简短的实用程序,我在其中使用 randomUUID() 生成 UUID。
String uuid = UUID.randomUUID().toString();
但是生成的uuid太长了,长度是36。
有什么方法可以将 UUID 的长度从 36 减少到接近 16 或使 UUID 长度动态化?
最佳答案
如果你不需要它是唯一的,你可以使用你喜欢的任何长度。
例如,您可以这样做。
Random rand = new Random();
char[] chars = new char[16];
for(int i=0;i<chars.length;i++) {
chars[i] = (char) rand.nextInt(65536);
if (!Character.isValidCodePoint(chars[i]))
i--;
}
String s = new String(chars);
这将为您提供几乎相同程度的随机性,但会使用 \u0000
和 \ufffd
之间的所有可能字符>
如果您需要可打印的 ASCII 字符,您可以尽可能短,但唯一性的可能性会大大降低。可以做的是使用 base 36 而不是 base 16
UUID uuid = UUID.randomUUID();
String s = Long.toString(uuid.getMostSignificantBits(), 36) + '-' + Long.toString(uuid.getLeastSignificantBits(), 36);
平均26个字符,最多27个字符。
可以使用base64编码,减少到22个字符。
如果你使用 base94,你可以得到 20 个字符。
如果您使用从\u0000 到\ufffd 的整个有效字符范围,您可以将其减少到仅 9 个字符或 17 个字节。
如果您不关心字符串,您可以使用 16、8 位字节。
关于java - 如何减少使用 randomUUID( ) 生成的 UUID 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994768/