代码之家  ›  专栏  ›  技术社区  ›  Pyrolistical

Java中选择随机种子的跨平台方法是什么?

  •  4
  • Pyrolistical  · 技术社区  · 16 年前

    读完这个答案后: best way to pick a random subset from a collection?

    这让我想知道,如何在Java中随机挑选种子?

    这是一个很难回答的问题,但让我更难回答。假设您需要生成一个随机种子,而无需连接到internet,无需使用用户输入(即,没有gui),并且它必须是跨平台的(因此没有JNI来访问硬件)。

    是否有一些JVM变量可以作为随机性的来源进行监控?

    3 回复  |  直到 7 年前
        1
  •  6
  •   Dan Dyer    16 年前

    看看 Uncommons Maths

    甚至,如果你不使用它,你应该能够从各种各样的网站上获得一些想法 SeedGenerator 它提供的实现。基本上,它默认使用 /dev/random random.org 或者它使用 SecureRandom.generateSeed .

    我认为SecureRandom.generateSeed是您在不依赖任何特定平台或互联网的情况下所能做到的最佳选择。

        2
  •  0
  •   Jason Cohen    16 年前

    结合 System.currentTimeMillis() 使用全局计数器,每次生成种子时都会递增该计数器。使用 AtomicLong 用于计数器,以便提高效率和线程安全性。

    “Combine”并不意味着“add”或“xor”,因为它太容易获得副本。取而代之的是散列。您可能会变得复杂,并将long和计数器塞进例如16字节和MD5中,但我可能会使用64位版本的Adler CRC或其他一些 64-bit CRC .

        3
  •  0
  •   james    16 年前