我有点困惑,怎么做呢?我知道我可以使用Random类来生成随机数,但我不知道如何指定和生成8字节的数字?
谢谢,Vuk
发布于 2010-12-26 06:20:18
我同意@aioobe关于随机使用48位种子的观点。SecureRandom是一个更好的解决方案。然而,要回答OP的问题,即如何使用Random类,并且仍然允许所有可能的8字节值,则需要定期重置种子。
int counter = 0;
Random rand = new Random();
Random rand2 = new Random();
if (++counter == 0) rand = new Random(); // reset every 4 billion values.
long randomLong = rand.nextLong() ^ rand2.nextLong() << 1;
随机数仅允许2^47个长值的序列。通过使用两个随机生成器,其中一个在序列中不断跳跃,您将获得两个2^47 * 2^47个可能的值。使用<< 1是为了避免两个随机数具有相同种子的影响(在这种情况下,^将为一行中的40亿值生成0)
发布于 2010-12-26 05:50:23
它可以使用长度为8的字节数组来完成:
byte[] byteArray = new byte[8];
random.nextBytes(byteArray);
或者使用long
类型的变量(表示8字节的数字):
long randomLong = random.nextLong();
发布于 2010-12-26 05:51:56
long
类型是一个8字节的带符号整数,所以Random.nextLong()
似乎可以做您想做的事情。或者,如果您需要字节数组作为结果:
byte[] result = new byte[8];
Random.nextBytes(result);
https://stackoverflow.com/questions/4531799
复制相似问题