gpt4 book ai didi

java - 在 Java 中生成 8 字节数字

转载 作者:IT老高 更新时间:2023-10-28 20:57:56 24 4
gpt4 key购买 nike

我有点困惑,如何做到这一点。我知道我可以使用 Random 类来生成随机数,但是我不知道如何指定和生成 8 字节数?

谢谢,武客

最佳答案

您应该注意,java.util.Random 类使用 48 位种子,因此并非所有 8 字节值(64 位序列)都可以使用该类生成。由于这个限制,我建议你使用 SecureRandomnextBytes method在这种情况下。

用法和java.util.Random方案很相似。

SecureRandom sr = new SecureRandom();
byte[] rndBytes = new byte[8];
sr.nextBytes(rndBytes);

以下是 48 位种子不够用的原因:

  • Random 类实现了一个伪随机生成器,这意味着它是确定性的。
  • Random 的当前“状态”决定了 future 的位序列。
  • 由于它有 248 个状态,它不能有超过 248 个可能的 future 序列。
  • 由于一个 8 字节的值有 264 种不同的可能性,其中一些可能性永远不会从 Random 对象中读取。

基于 @Peter Lawreys excellent answer (它值得更多的支持!):这是一个使用 2×48 位种子创建 java.util.Random 的解决方案。也就是说,一个 java.util.Random 实例能够生成所有可能的 longs。

class Random96 extends Random {
int count = 0;
ExposedRandom extra48bits;

class ExposedRandom extends Random {
public int next(int bits) { // Expose the next-method.
return super.next(bits);
}
}

@Override
protected int next(int bits) {
if (count++ == 0)
extra48bits = new ExposedRandom();
return super.next(bits) ^ extra48bits.next(bits) << 1;
}
}

关于java - 在 Java 中生成 8 字节数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com