我正在使用一些代码生成一个16字节长度的String和 在使用我的代码时,我注意到了 奇怪的 行为:
public static String generateMyUniqueString() {
return new BigInteger(64,oRandom).toString(16);
}
99%的时候,这给了我一个很好的16个字符长度的字符串 但是,有时,生成的字符串长度为15个字符,现在,我找不到原因。
答案 0 :(得分:1)
您的代码为:
生成随机安全的64位整数并将其转换为十六进制字符串。
当它转换为字符串时,省略前导零。如果你真的很幸运,你也可以获得14位或更少位数的结果。
如果您希望始终具有16位数值,则需要手动添加前导零。
请参阅:https://stackoverflow.com/a/6185386/3264295了解如何填充字符串的示例
答案 1 :(得分:1)
我建议你试试
public static String generateMyUniqueString() {
return String.format("%016x", new BigInteger(64, oRandom));
}
这将始终为16位数字,因为它会填充起始点。
顺便说一句:如果你产生了40亿个这些ID,那么50/50的变化将会是相同的。您是否考虑使用UUID(128位)或耐用计数器?