Class CachedRandomBits

java.lang.Object
org.apache.commons.lang3.CachedRandomBits

final class CachedRandomBits extends Object
Generates random integers of specific bit length.

It is more efficient than calling Random.nextInt(1 invalid input: '<'invalid input: '<' nbBits). It uses a cache of cacheSize random bytes that it replenishes when it gets empty. This is especially beneficial for SecureRandom Drbg implementations, which incur a constant cost at each randomness generation.

Used internally by RandomStringUtils.

#NotThreadSafe#

  • Field Details

    • random

      private final Random random
    • cache

      private final byte[] cache
    • bitIndex

      private int bitIndex
      Index of the next bit in the cache to be used.
      • bitIndex=0 means the cache is fully random and none of the bits have been used yet.
      • bitIndex=1 means that only the LSB of cache[0] has been used and all other bits can be used.
      • bitIndex=8 means that only the 8 bits of cache[0] has been used.
  • Constructor Details

    • CachedRandomBits

      CachedRandomBits(int cacheSize, Random random)
      Creates a new instance.
      Parameters:
      cacheSize - number of bytes cached (only affects performance)
      random - random source
  • Method Details

    • nextBits

      public int nextBits(int bits)
      Generates a random integer with the specified number of bits.
      Parameters:
      bits - number of bits to generate, MUST be between 1 and 32
      Returns:
      random integer with bits bits