in commons-rng-client-api/src/main/java/org/apache/commons/rng/UniformRandomProviderSupport.java [214:248]
static void nextBytes(UniformRandomProvider source,
byte[] bytes, int start, int len) {
// Index of first insertion plus multiple of 8 part of length
// (i.e. length with 3 least significant bits unset).
final int indexLoopLimit = start + (len & 0x7ffffff8);
// Start filling in the byte array, 8 bytes at a time.
int index = start;
while (index < indexLoopLimit) {
final long random = source.nextLong();
bytes[index++] = (byte) random;
bytes[index++] = (byte) (random >>> 8);
bytes[index++] = (byte) (random >>> 16);
bytes[index++] = (byte) (random >>> 24);
bytes[index++] = (byte) (random >>> 32);
bytes[index++] = (byte) (random >>> 40);
bytes[index++] = (byte) (random >>> 48);
bytes[index++] = (byte) (random >>> 56);
}
// Index of last insertion + 1
final int indexLimit = start + len;
// Fill in the remaining bytes.
if (index < indexLimit) {
long random = source.nextLong();
for (;;) {
bytes[index++] = (byte) random;
if (index == indexLimit) {
break;
}
random >>>= 8;
}
}
}