通过大气噪声在Java中生成随机数

Generating a Random Number in Java From Atmospheric Noise

在Java中生成随机数时,我们有几种选择。 但是,我怀疑您在这篇文章中所学到的东西是否有趣或随机。 因此,如果您对如何使用地球的大气噪声在Java中生成一个真正的随机数感兴趣,请继续阅读...

Java随机数| 大气噪声

多年以来,在阅读了许多有关使用Java生成随机数的文章之后,我注意到大多数内容都是通过在random.org上删除对在线服务的引用而完成的,该服务通过大气噪声生成随机性!

我曾经用"嗯,很酷"来刷掉它,直到有一天我再次阅读它并以为……创建一个实际上试图做到这一点的Java类不是很好吗? 所以我做了! 这催生了AtmosphericRandom Java类。

首先,random.org非常棒! 该网站用于彩票抽奖和在线游戏以及其他用例。 该站点允许您根据大气噪声生成随机值。 您问什么是大气噪声? 它是自然大气过程引起的无线电噪声,主要是雷暴中的闪电放电。

换句话说,可以测量这种完全不可预测的自然现象,并将其用于得出随机值,这对我们有好处! random.org网站允许您生成以下随机值:

  • 整数(这篇文章介绍了—通过nextInt方法,该方法在random.org内部调用generateIntegers)

  • 整数序列

  • 小数部分

  • 弦乐

  • UUID

  • 斑点

  • 您可以创建一个免费的开发人员帐户,在该帐户中生成一个API密钥供您访问基本API。 我选择使用其最新的JSON RPC 2.0 API-抱歉,没有可用的RESTful API。

    通过使用Apache的HttpComponents API进行HTTP客户端编程来进行JSON数据绑定,并使用Spring Boot 2.0作为妖精,我能够将概念证明放在一起,以生成真正的随机整数。

    如果您有兴趣查看MVP Java YouTube视频教程,请单击此处。

    大气随机应用

    除非您有连接到计算机的特殊设备来测量大气噪声,否则您将需要API密钥才能开始使用。 我在下面的 application.properties 文件中添加了我的文件,但由于您不希望我用尽我所有的免费请求,因此在您阅读本文时将其停用!

    注册后,您将获得自己的API密钥,因此只需将其替换为property apiKey旁边的密钥即可。

    Image title

    当然,我们需要使用@SpringBootApplication声明此Spring Boot应用程序的入口点,然后,依赖项将注入我们的起点(application.class),我们在下面看到的是通过@Autowired注入的。

    Image title

    大气随机nextInt

    通过class AtmpsphericRandom生成随机整数与使用Java的Random或SecureRandom类似,在某种意义上,当您获得对它的引用时,您要做的就是调用nextInt()方法。

    AtmpsphericRandom是通过Spring Java Configuration(如下所示)注入到下面的应用程序类的构造函数中的依赖项。 您可以在下面的startApplication()方法中看到使用AtmpsphericRandom有多容易。

    当设置不带参数的nextInt()时,我设置了默认值以生成一个以10为底的且在范围内(1-1000 )的随机整数。 您可以在下面看到JSON请求和响应,其中应用程序默认会打印出一个随机整数。 这些值在下面显示的响应" 数据"数组元素中。

    定制随机整数请求| nextInt

    您也可以使用nextInt( .... )的重载方法来覆盖默认值。 以下nextInt (5, 1, 2000)指定请求 5 个随机数整数,最小范围为 1 ,最大范围为 2000

    重载版本返回整数数组,因为这次需要多个(5)随机整数值。

    Image title

    以下是JSON请求和响应控制台的输出,结果是应用程序打印出请求的5个随机整数值。

    Image title

    我将第一个承认这不是在Java中获取随机数的最快方法,但是没有什么可以阻止您对您认为合适的任意整数进行单个请求,如上所述。 不幸的是,向random.org服务发出HTTP请求会增加开销,但这是您要从天堂获得随机整数所必须付出的代价!

    AtmosphericRandom类需要一些建筑才能使其启动并运行。 值得庆幸的是,通过允许我们进行依赖注入,Spring Java配置确实在这里有所帮助。

  • CloseableHttpClient :来自Apache HttpComponents API的Http客户端,用于发送和接收HTTP请求/响应

  • HttpPostFactory :隐藏将Java Object RandomRequest映射到包装在HTTP POST请求中的JSON请求中所需的所有创建详细信息

  • RandomMapper :扩展Jacksons ObjectMapper,以提供从JSON / Java对象(RandomRequestRandomResponse)到/到JSON / Java对象的自定义映射,这在本文中未显示—请在上查看源代码。 GitHub)

  • Image title

    Spring Java @Configuration为我们构建了上述三个依赖项后,即可将它们用于创建AtmosphericRandom Spring @Bean。 我们的应用程序@Bean然后在其构造函数中接收AtmosphericRandom,供我们在演示中使用。

    我将在YouTube上逐步测试该应用程序。

    结论

    知道您可以从大气噪声中生成一个随机数,这很酷,对吧? 尽管此演示只是在允许您从random.org检索随机整数的基础上进行介绍,但可以扩展为请求API支持的其他类型。 我邀请您在此处访问MVP Java的GitHub帐户以试用源代码-别忘了获得自己的API密钥!