2017-02-11 8 views
0

私が理解しているように、擬似ランダムアクティビティを実行できるJavaの主なクラスは、Randomクラスとクラスの2つです。どちらも擬似乱数を生成します。ただし、SecureRandomクラスは暗号で安全な番号を生成します。SecureRandomクラスを使用できるときにJavaのランダムクラスを使用する理由は?

クラスを使用することができるときに、なぜRandomクラスを使用すると、予測できない数値が生成されるのでしょうか?多くのプログラマ(特にビデオゲームプログラマ)はRandomクラスのみを使用しますが、どちらのクラスもほとんど同じコアメソッドを持っています(どちらも擬似乱数を生成できます)。どちらのクラスも長い値でシードすることができます。

私の唯一の説明はRandomクラスがSecureRandomクラスよりも速く動作するということです。これは本当ですか?そうでなければ、なぜ多くのJavaプログラマはクラスよりもRandomクラスを好むのですか?

+2

[で開始するにはシードのため、常に同じ結果が(あなたも戦略を指定しない場合、デフォルトのSecureRandomは異なる場合があります): //docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html):* "[...]実装によっては、generateSeedおよびnextBytesメソッド**が**をエントロピーとしてブロックすることがあります集まっている[...] "*。また、「ランダム」は、決定論的なランダムシーケンスを提供し、おそらくほとんどの実装ではより高速です。 – aioobe

答えて

1

ランダムが古いので、より多くの例がある可能性が高い理由の

  • の数があります。
  • 多くの場合、ランダムは十分にランダムであり、はるかに高速です。
  • ランダムは、すべてのプラットフォームで同じ結果を生成し、(HTTPを
+1

また、いくつかのテスト状況では、同じ一連の乱数を繰り返す必要があります。あなたはそれを同じ種を与えることによって 'ランダム'で行うことができます。 'SecureRandom'でそれを行うことはできません。 – rossum

+1

@rossumいくつかのSecureRandom戦略では可能ですが、これを行うためのデフォルト戦略に頼ることはできません。 –

関連する問題