Enum DefaultSeedGenerator
- java.lang.Object
-
- java.lang.Enum<DefaultSeedGenerator>
-
- io.github.pr0methean.betterrandom.seed.DefaultSeedGenerator
-
- All Implemented Interfaces:
SeedGenerator
,Serializable
,Comparable<DefaultSeedGenerator>
public enum DefaultSeedGenerator extends Enum<DefaultSeedGenerator> implements SeedGenerator
Seed generator that is the default for the program where it is running. PRNGs that are serialized using one program's default and deserialized in another program will use the latter's default seed generator, which is part of the static state. This means a PRNG's serial form won't specify a particular seed generator if it was constructed without specifying one.
The default implementation maintains multiple strategies for seed generation and will delegate to the best one available at any moment. It uses, in order of preference:
DevRandomSeedGenerator
with 128-byte bufferAnuQuantumSeedClient
with 1024-byte bufferRandomDotOrgAnonymousClient
with 625-byte bufferSecureRandomSeedGenerator
with no buffer
The reasons to use DefaultSeedGenerator rather than its delegate directly are twofold:
RandomSeeder
instances that are serialized and deserialized will respect any change of delegate that has been made in the destination program withset(SeedGenerator)
.- You avoid having to pass a SeedGenerator as an explicit constructor parameter to descendants
of
BaseRandom
.
- Author:
- Daniel Dyer, Chris Hennick
-
-
Enum Constant Summary
Enum Constants Enum Constant Description DEFAULT_SEED_GENERATOR
Singleton instance.
-
Field Summary
Fields Modifier and Type Field Description static Duration
DEFAULT_RETRY_DELAY
-
Fields inherited from interface io.github.pr0methean.betterrandom.seed.SeedGenerator
EMPTY_SEED
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
generateSeed(byte[] output)
Generates a seed value for a random number generator in an existing array.byte[]
generateSeed(int length)
Generates and returns a seed value for a random number generator as a new array.static SeedGenerator
get()
Returns the current delegate used by this class's singleton instance.static void
set(SeedGenerator delegate)
Sets the default seed generator (a delegate used by this class's singleton instance).static DefaultSeedGenerator
valueOf(String name)
Returns the enum constant of this type with the specified name.static DefaultSeedGenerator[]
values()
Returns an array containing the constants of this enum type, in the order they are declared.-
Methods inherited from class java.lang.Enum
clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
-
Methods inherited from interface io.github.pr0methean.betterrandom.seed.SeedGenerator
isWorthTrying
-
-
-
-
Enum Constant Detail
-
DEFAULT_SEED_GENERATOR
public static final DefaultSeedGenerator DEFAULT_SEED_GENERATOR
Singleton instance.
-
-
Field Detail
-
DEFAULT_RETRY_DELAY
public static final Duration DEFAULT_RETRY_DELAY
-
-
Method Detail
-
values
public static DefaultSeedGenerator[] values()
Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows:for (DefaultSeedGenerator c : DefaultSeedGenerator.values()) System.out.println(c);
- Returns:
- an array containing the constants of this enum type, in the order they are declared
-
valueOf
public static DefaultSeedGenerator valueOf(String name)
Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)- Parameters:
name
- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
IllegalArgumentException
- if this enum type has no constant with the specified nameNullPointerException
- if the argument is null
-
get
public static SeedGenerator get()
Returns the current delegate used by this class's singleton instance.- Returns:
- the current delegate
-
set
public static void set(SeedGenerator delegate)
Sets the default seed generator (a delegate used by this class's singleton instance).- Parameters:
delegate
- the new delegate
-
generateSeed
public void generateSeed(byte[] output) throws SeedException
Generates a seed value for a random number generator in an existing array.Generates a seed by trying each of the available strategies in turn until one succeeds. Tries the most suitable strategy first and eventually degrades to the least suitable (but guaranteed to work) strategy.
- Specified by:
generateSeed
in interfaceSeedGenerator
- Parameters:
output
- The array that is to be populated with the seed.- Throws:
SeedException
- If a seed cannot be generated for any reason.
-
generateSeed
public byte[] generateSeed(int length) throws SeedException
Description copied from interface:SeedGenerator
Generates and returns a seed value for a random number generator as a new array.- Specified by:
generateSeed
in interfaceSeedGenerator
- Parameters:
length
- The length of the seed to generate (in bytes).- Returns:
- A byte array containing the seed data.
- Throws:
SeedException
- If a seed cannot be generated for any reason.
-
-