16字节长度有时变为15字节长度

时间:2014-12-17 07:03:31

标签: java byte tostring biginteger

我正在使用一些代码生成一个16字节长度的String和 在使用我的代码时,我注意到了 奇怪的 行为:

public static String generateMyUniqueString() {
    return new BigInteger(64,oRandom).toString(16);
}

99%的时候,这给了我一个很好的16个字符长度的字符串 但是,有时,生成的字符串长度为15个字符,现在,我找不到原因。

2 个答案:

答案 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位)或耐用计数器?