首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中生成8字节数字

在Java中生成8字节数字
EN

Stack Overflow用户
提问于 2010-12-26 05:47:30
回答 4查看 13.8K关注 0票数 19

我有点困惑,怎么做呢?我知道我可以使用Random类来生成随机数,但我不知道如何指定和生成8字节的数字?

谢谢,Vuk

EN

回答 4

Stack Overflow用户

发布于 2010-12-26 06:20:18

我同意@aioobe关于随机使用48位种子的观点。SecureRandom是一个更好的解决方案。然而,要回答OP的问题,即如何使用Random类,并且仍然允许所有可能的8字节值,则需要定期重置种子。

代码语言:javascript
复制
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)

票数 14
EN

Stack Overflow用户

发布于 2010-12-26 05:50:23

它可以使用长度为8的字节数组来完成:

代码语言:javascript
复制
byte[] byteArray = new byte[8];    
random.nextBytes(byteArray);

或者使用long类型的变量(表示8字节的数字):

代码语言:javascript
复制
long randomLong = random.nextLong();
票数 8
EN

Stack Overflow用户

发布于 2010-12-26 05:51:56

long类型是一个8字节的带符号整数,所以Random.nextLong()似乎可以做您想做的事情。或者,如果您需要字节数组作为结果:

代码语言:javascript
复制
byte[] result = new byte[8];
Random.nextBytes(result);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4531799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档